类似于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秒后它会很好地动画到“缩小”尺寸。如果我链接更多序列,它们都能正常工作,除了第一个。
答案 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)是与块一起传递的参数。它告诉动画是否真的完成了。如果否,则表示动画已中断。