iPhone UIDatePicker very slow

advertisements

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!


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?