ipad:为什么我的连续动画的第一个动画总是立即完成?

时间:2011-10-27 12:38:11

标签: ios ipad animation sequential

类似于SO问题参考:Why does UIView:animateWithDuration complete immediately?但是,我的代码使用的是[UIView beginAnimation]等。

我基本上有这个:

[UIView beginAnimation ...];
[UIView setAnimationDelay: 0.0];
[UIView setAnimationDuration: 1.25];
animatedImage.transform = "scale-up transform";

[UIView setAnimationDelay: 1.25]
[UIView setAnimationDuration: 0.50];
animatedImage.transform = "scale-down transform";

[UIView commitAnimation];

图像立即跳到放大尺寸,然后1.25秒后它会很好地动画到“缩小”尺寸。如果我链接更多序列,它们都能正常工作,除了第一个。

1 个答案:

答案 0 :(得分:1)

当你将动画放在同一个beginAnimation区域时,它们会同时生成动画。

通过调用[UIView setAnimationDelay:1.25],你只是覆盖了之前的[UIView setAnimationDelay:0.0]。

所以会发生什么,是UIView被告知同时向上和向下扩展。我想,既然你告诉它可以向上和向下缩放,它只是跳到动画的最后一个,但你确实告诉它要放大,所以没有动画就可以做到。

我建议使用块语法,它允许您在动画完成后执行操作:

[UIView animateWithDuration:1.25
                 animations:^{animatedImage.transform = "scale-up transform";}
                 completion:^(BOOL finished)
                 {
                     [UIView animateWithDuration:1.25
                                      animations:^{animatedImage.transform = "scale-down transform";}
                     ];
                 }
 ];

完成块中的代码(^ {code}构造称为“块”)是在第一个动画之后发生的。您可以根据需要随意添加动画链接。

(BOOL finished)是与块一起传递的参数。它告诉动画是否真的完成了。如果否,则表示动画已中断。