UIDatePicker не будет анимировать - PullRequest
0 голосов
/ 14 июля 2010

У меня есть представление, содержащее сегментированный контроллер и UIDatePicker, который показывает только 24-часовое время. Я хочу иметь возможность устанавливать разное время в зависимости от того, что говорит сегментированный элемент управления. Таким образом, «Mon» будет соответствовать одному разу, «Tue» другому и так далее. У меня это работает. Однако я также хотел бы анимировать средство выбора, когда пользователь меняет кнопку на сегментированном контроллере. На данный момент в моем методе действия, связанном с сегментированным контроллером, есть следующее:

[timePicker setDate:date animate:YES];

Где дата - это NSDate, отформатированный примерно так: ЧЧ: мм

Как я уже сказал, он изменится на дату, но не оживит операцию. Кто-нибудь знает, почему он не оживляет?

Кстати, хотя я установил форматирование как «ЧЧ: мм», если я использую NSLog для его печати, я все равно получаю всю напечатанную строку 1970-01-01 +02: 00: 00. Я предполагаю, что единственный чч: мм все равно отправляется в средство выбора даты, и что только NSLog печатает все это?

РЕДАКТИРОВАТЬ: Вот код для фактического контроллера представления, и это работает SDK4

#import "FlipsideViewController.h"

@implementation FlipsideViewController

@synthesize delegate, times, weatherImage, condition, timePicker;


- (void)viewDidLoad {

    [super viewDidLoad];
    self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];

    UIImage *image = [UIImage imageNamed:@"sunny.png"];
    weatherImage.image = image;

    WeatherClockAppDelegate *appDelegate = (WeatherClockAppDelegate *)[[UIApplication sharedApplication] delegate];

    times = appDelegate.times;

    [timePicker addTarget:self action:@selector(timePickerAction:) forControlEvents:UIControlEventValueChanged];

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"HH:mm"];
    NSDate *sunnyDate = [df dateFromString: [times objectAtIndex:0]];
    [df release];

    [timePicker setDate:sunnyDate animated:NO];


}

- (IBAction)done:(id)sender {

    if (!busy) {

        [self.parentViewController dismissModalViewControllerAnimated:YES];

        for (NSString *s in times) {
            NSLog(@"Set times: %@", s);
        }
    }

}

- (IBAction)segmentedAction {

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"HH:mm"];

    switch (self.condition.selectedSegmentIndex) {

        case 0:

            self.weatherImage.image = [UIImage imageNamed:@"sunny.png"];

            NSDate *sunnyDate = [df dateFromString: [times objectAtIndex:0]];

            [timePicker setDate:sunnyDate animated:YES];

            break;

        case 1:

            self.weatherImage.image = [UIImage imageNamed:@"cloudy.png"];

            NSDate *cloudyDate = [df dateFromString: [times objectAtIndex:1]];

            NSLog(@"Cloudydate: %@", cloudyDate);

            [timePicker setDate:cloudyDate animated:YES];

            break;

        case 2:

            self.weatherImage.image = [UIImage imageNamed:@"rain.png"];

            NSDate *rainyDate = [df dateFromString: [times objectAtIndex:2]];

            [timePicker setDate:rainyDate animated:YES];

            break;

        case 3:

            self.weatherImage.image = [UIImage imageNamed:@"final.png"];

            NSDate *finalDate = [df dateFromString: [times objectAtIndex:3]];

            [timePicker setDate:finalDate animated:YES];

            break;

    }

    [df release];
}


- (IBAction)timePickerAction:(id)sender {

    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setDateFormat:@"HH:mm"];
    NSString *date = [NSString stringWithFormat:@"%@", [df stringFromDate:timePicker.date]];
    NSLog(@"%@", date);
    [df release];

    switch (self.condition.selectedSegmentIndex) {

        case 0:

            [times replaceObjectAtIndex:0 withObject:date];

            break;

        case 1:

            [times replaceObjectAtIndex:1 withObject:date];

            break;

        case 2:

            [times replaceObjectAtIndex:2 withObject:date];         

            break;

        case 3:

            [times replaceObjectAtIndex:3 withObject:date];

            break;

    }

}


- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}


- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}


/*
 // Override to allow orientations other than the default portrait orientation.
 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 // Return YES for supported orientations
 return (interfaceOrientation == UIInterfaceOrientationPortrait);
 }
 */


- (void)dealloc {

    [times release];
    [weatherImage release];
    [condition release];
    [timePicker release];
    [super dealloc];
}


@end

1 Ответ

1 голос
/ 25 июля 2010

Это не для меня тоже анимация на iOS4.0.1 SDK, как на симуляторе, так и на устройстве. Не знаю, работало ли это до 4.0.1.

Чтобы попробовать, добавьте следующий код в пример проекта UICatalog, PickerViewController.m в - (void) viewDidLoad

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = labelFrame;
[button setTitle:@"Spin me" forState:UIControlStateNormal];
[button addTarget:self action:@selector(spin) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

Добавьте также метод выше - (void) viewDidLoad в PickerViewController.m

- (void) spin {
    [datePickerView setDate:[NSDate date] animated:YES];
}

Исходя из кода, если вы запустите проект, перейдите к Pickers, выберите UIDatePicker, поверните колесо даты к любой дате, отличной от сегодняшней, нажмите кнопку «Spin Me», она должна вернуть колесо на сегодняшний день, НО это не оживило бы.

Мне трудно понять, является ли это просто ошибкой, и есть ли обходной путь. Довольно удивительно услышать, что setDate: animated: работает для некоторых из вас.

...