为什么我应该使用基于块的animation而不是开始/结束animation?

正如你所知,苹果鼓励我们使用一种叫做基于块的animation的新方法来关于iOS 4.0的animation。

我真的不知道基于块的animation比开始/结束样式animation更好。
性能?
并发?
编码效率和便利性?

那时我也想知道。

但是在使用基于块的animation之后:

[UIView animateWithDuration:0.5 ... ^{ // animated custom view vertically } completion:^{ [UIView animateWithDuration:0.5 ... ^{ // animate the fade in alpha of buttons }]; }]; 

它以简洁的方式提供了完成处理程序。 您也可以将子animation块彼此嵌套。

通过BeginAnimation / EndAnimation,我不记得如何为完成处理程序执行callback,但通常会执行如下操作:

//开始animation//设置委托//为每个beginAnimation创build委托callback函数

现在想象一下,如果你想嵌套3或4级的animation,比如复制CSS的灯箱效果:

1)淡入灯箱容器

2)展开宽度

3)展开高度

4)淡入淡出

你必须处理一些相当混乱的if-else条件。

您的工作stream程如下所示:

“在这个beginAnimation完成之后,它向我的callback方法发送消息,向下滚动Xcode以查找callback委托方法,然后在callback方法中调用另一个UIView beginAnimation,向后滚动Xcode以查找下一个beginAnimation …”

使用基于块的animation,每个进程都被封装在一个块中,您可以嵌套在另一个块中。 如果你决定要改变顺序的东西出现这样的:

1)淡入灯箱容器

2)这次在宽度之前展开高度

3)这次在高度后展开宽度

4)淡入淡出

随着开始animation的方法,你会开始拉你的头发。

希望有所帮助。

很方便。

通过使用块可以提高性能。 所以这不太可能。 我曾经想过,animation的所有块语法都是通过调用旧方法(或通过调用类似的内部方法来有效地执行这些操作),并在beginAnimation和commitAnimation之间运行块。

所以方便 无论如何,我build议单独使用它。 使用起来更容易,并且可以很容易地嵌套animation并完成任务,因为您不需要创build其他方法来完成调用 – 这只是另一个块。