iOS – 多个animation块?

我有多个animation,必须作为链运行。 我一直在处理这个问题的方法是使用completionHandler并运行下一个animation块。 有一个更清洁的方式来处理这个问题吗?

[UIView animateWithDuration:1 animations^{ // perform first animation }completion:(BOOL finished){ [UIView animateWithDuration:1 animations^{ // perform second animation }completion:(BOOL finished){ }]; }]; 

你也可以使用animateWithDuration:delay:options:animations:completion:交错延迟,以便它们按顺序开始,但通常最好用完成块来完成。

如果有几个代码难以阅读,就把这些代码块分开(我把这个代码从脑子里input,所以不能编译):

 typedef void (^AnimationBlock)(); AnimationBlock firstAnimation = ^{ ... }; AnimationBlock secondAnimation = ^{ ... }; [UIView animateWithDuration:1 animations:firstAnimation completion:(BOOL finished) { [UIView animateWithDuration:1 animations:secondAnimation];}]; 

您可以在UIView上创build一个类别,并将这些类别的数组链接在一起,但是您必须处理所有的angular落案例。 你如何定义时机; 你如何处理stream产的animation等等。以上可能是大多数情况下最好的方法。

我写了一篇关于这个的博客文章 。 我的方法是创build一个封装块和其他animation属性的animation对象。 然后,您可以将这些对象的数组传递给另一个将按顺序执行它们的animation对象。 代码在GitHub上可用 。