iOS - 多个动画块?

时间:2012-04-04 21:44:06

标签: ios uiviewanimation

我有多个必须作为链运行的动画。 我一直在处理的方法是使用completionHandler并运行下一个动画块。 有没有更清洁的方法来解决这个问题?

[UIView animateWithDuration:1 animations^{

        // perform first animation
     }completion:(BOOL finished){

          [UIView animateWithDuration:1 animations^{

               // perform second animation
          }completion:(BOOL finished){

         }];

}];

2 个答案:

答案 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)

我写了blog post这个。我的方法是创建一个封装块和其他动画属性的动画对象。然后,您可以将此类对象的数组传递给另一个将按顺序执行它们的动画对象。该代码可在GitHub上找到。