Reputation: 16168
Im using a UIDatePicker on ModeTime,
but is very slow??
here the code:
#import "U2YAccountController.h"
@implementation U2YAccountController
@synthesize timePicker = _timePicker;
@synthesize timeLabel= _timeLabel;
@synthesize scheduleLabel = _scheduleLabel;
- (id)init
{
self = [super init];
if (self) {
// Set title
self.title = @"Reminder Settings";
CGRect dosageImageRect = CGRectMake(10, 30, 300, 62);
UIImageView *dosageImage = [[UIImageView alloc] initWithFrame:dosageImageRect];
[dosageImage setImage:[UIImage imageNamed:@"dosageReminderButton.png"]]; //image was a button, now just image change name of png!
dosageImage.opaque = YES; // explicitly opaque for performance
[self.view addSubview:dosageImage];
[dosageImage release];
UIButton *timeReminderButton = [UIButton buttonWithType:UIButtonTypeCustom];
[timeReminderButton setImage:[UIImage imageNamed:@"reminderTimeButton.png"] forState:UIControlStateNormal];
[timeReminderButton setFrame:CGRectMake(10, 110, 300, 44)];
[timeReminderButton addTarget:self action:@selector(timeReminderButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[timeReminderButton setAdjustsImageWhenHighlighted:NO];
[self.view addSubview:timeReminderButton];
self.timePicker = [[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 415, 220, 180)]autorelease];
self.timePicker.datePickerMode = UIDatePickerModeTime;
[self.timePicker addTarget:self action:@selector(timePickerChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.timePicker];
//[self.timePicker setHidden:YES];
self.scheduleLabel = [[[UILabel alloc]initWithFrame:CGRectMake(22, 64, 200, 20)]autorelease];
self.scheduleLabel.textColor = [UIColor colorWithRed:12/255.0 green:113/255.0 blue:186/255.0 alpha:1];
self.scheduleLabel.text = @"Schedule 6 of 7 days"; //updated from web site!!
[self.view addSubview:self.scheduleLabel];
self.timeLabel = [[[UILabel alloc]initWithFrame:CGRectMake(213, 122, 80, 20)]autorelease];
self.timeLabel.textColor = [UIColor colorWithRed:12/255.0 green:113/255.0 blue:186/255.0 alpha:1];
self.timeLabel.backgroundColor = [UIColor clearColor];
self.timeLabel.text = @"";
[self.view addSubview:self.timeLabel];
dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"hh:mma"];
}
return self;
}
- (void) timeReminderButtonPressed :(id) sender {
recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)] ;
[UIView beginAnimations:@"PickerUp" context:nil];
[UIView setAnimationDuration:0.3f];
[UIView setAnimationBeginsFromCurrentState:YES];
self.timePicker.frame = CGRectMake(0, 237, 320, 180);
[self.view addGestureRecognizer:recognizer];
[recognizer release];
}
- (void) timePickerChanged:(id) sender {
today = [sender date];
NSString *dateString = [dateFormat stringFromDate:today];
self.timeLabel.text = dateString;
}
- (void) viewTapped :(id) sender {
[UIView beginAnimations:@"PickerDown" context:nil];
[UIView setAnimationDuration:0.3f];
[UIView setAnimationBeginsFromCurrentState:YES];
self.timePicker.frame = CGRectMake(0, 415, 320, 180);
[self.view removeGestureRecognizer:recognizer];
}
- (void) dealloc {
[dateFormat release];
[_scheduleLabel release];
[_timeLabel release];
[_timePicker release];
[super dealloc];
}
@end
So why is my picker slow and getting stucked? what im i missing??
ps. I have commented the nsDateFormatter to find if that was the problem, but no change...
thanks a lot!
Upvotes: 2
Views: 2018
Reputation: 2440
Another thing to add to previous answer is that you've forgot to commit your animation. I'll even suggest you to use animateWith... methods of the UIView class rather than beginAnimation/commitAnimation as it should be faster (at least by apple). And one more to go. The gesture recognizer... why not create it with the view at the init time? why create it every time you call the picker?
Upvotes: 3
Reputation: 243156
My initial reaction:
Allocating an NSDateFormatter
isn't a cheap prospect. In your case, you're using the same format string over and over again, so you should REALLY just be allocating a single NSDateFormatter
, saving it as an instance variable, and then using that when the UIDatePicker
action fires. That should speed things up considerably.
Upvotes: 6