我有多个必须作为链运行的动画。 我一直在处理的方法是使用completionHandler并运行下一个动画块。 有没有更清洁的方法来解决这个问题?
[UIView animateWithDuration:1 animations^{
// perform first animation
}completion:(BOOL finished){
[UIView animateWithDuration:1 animations^{
// perform second animation
}completion:(BOOL finished){
}];
}];
答案 0 :(得分:10)
您还可以使用animateWithDuration:delay:options:animations:completion:
交错延迟,以便它们按顺序启动,但通常最好使用完成块来执行。
如果有几个并且它使代码难以阅读,只需将这些块分解出来(我正在键入这个我的头顶,所以它可能无法编译):
typedef void (^AnimationBlock)();
AnimationBlock firstAnimation = ^{ ... };
AnimationBlock secondAnimation = ^{ ... };
[UIView animateWithDuration:1 animations:firstAnimation completion:(BOOL finished) {
[UIView animateWithDuration:1 animations:secondAnimation];}];
您可以在UIView
上创建一个类别,其中包含一系列此类块并将它们链接在一起,但是您必须处理所有角落情况。你如何定义时间;你如何处理流产动画等等。在大多数情况下,上述可能是最好的方法。
答案 1 :(得分:1)