0

类似于 SO 问题参考:为什么 UIView:animateWithDuration 立即完成?但是,我的代码正在使用 [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 秒后它很好地动画到“缩小”尺寸。如果我链接更多序列,它们都可以正常工作,除了第一个。

4

1 回答 1

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) 是与块一起传递的参数。它告诉动画是否真的完成了。如果否,您的动画被中断。

于 2011-10-27T12:52:14.117 回答