Как сделать так, чтобы две анимации для UIView выполнялись одна за другой - PullRequest
2 голосов
/ 14 апреля 2011

У меня небольшой UIView, и я хочу, чтобы он сначала переместился в центр экрана, а затем увеличил изображение до полного экрана.Но когда я начинаю запускать анимацию, например

[UIView beginAnimations:@"animation1" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(showDetailToFullscreen)];
self.currentDetailVC.frame = centerFrame;
[UIView commitAnimations];

И в том же контроллере у меня есть метод: showDetailToFullscreen

- (void)showDetailToFullscreen {
    CGRect screenFrame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    [UIView beginAnimations:@"animation2" context:nil];
    [UIView setAnimationDuration:0.5];
    self.currentDetailVC.view.frame = screenFrame;
    [UIView commitAnimations];
}

, но при запуске он все равно выполняется вместе.Я думаю, что проблема они все еще в той же транзакции.Но как я могу позволить этим двум анимациям исполняться одна за другой?Ценю за любой ответ!

Ответы [ 3 ]

3 голосов
/ 14 апреля 2011

Теперь считается, что лучше всего создавать аннотации для представлений с использованием методов «блоков», которые можно найти в разделе «Анимация представлений с блоками» в справочнике классов UIView .

В большинстве этих методов вы можете указать блок кода завершения, который можно использовать для запуска второй анимации после ее завершения. Вы также можете позвонить showDetailToFullscreen в этом блоке завершения.

Я бы рекомендовал вместо этого попробовать этот метод.

3 голосов
/ 14 апреля 2011

Попробуйте это вместо setAnimationDidStopSelector:

[self performSelector:@selector(showDetailToFullscreen) withObject:nil afterDelay:0.5];
0 голосов
/ 14 апреля 2011

Вы ориентируетесь на iOS 4 или более позднюю версию? Если так, я рекомендую вместо этого использовать методы блочной анимации. То, что вы хотите сделать, очень просто:

Пример из документов UIView:

[UIView animateWithDuration:0.2
     animations:^{view.alpha = 0.0;}
     completion:^(BOOL finished){ [view removeFromSuperview]; }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...