如何让UIView的两个动画逐一执行

时间:2011-04-14 15:53:04

标签: objective-c ios animation uiview

我有一个小的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 个答案:

答案 0 :(得分:3)

尝试使用此代替setAnimationDidStopSelector:

[self performSelector:@selector(showDetailToFullscreen) withObject:nil afterDelay:0.5];

答案 1 :(得分:3)

现在认为使用“块”方法制作视图会更好,这些方法可以在UIView Class Reference的“动画视图块”部分找到。

在大多数这些方法中,您可以指定一个“完成”代码块,可用于在第一个动画完成时启动第二个动画。您也可以在此完成块中调用showDetailToFullscreen

我建议改为尝试这种方法。

答案 2 :(得分:0)

您的目标是iOS 4或更高版本吗?如果是这样,我建议使用基于块的动画方法。你想做的事很容易:

来自UIView docs的示例:

[UIView animateWithDuration:0.2
     animations:^{view.alpha = 0.0;}
     completion:^(BOOL finished){ [view removeFromSuperview]; }];