如您所知,Apple鼓励我们在iOS 4.0上使用一种名为基于块的动画的新方法。
我真的很想知道基于块的动画比开始/结束风格动画更好
性能?
并发?
编码效率和便利性?
答案 0 :(得分:3)
我当时也很想知道这件事。
但是在使用像这样的基于块的动画之后:
[UIView animateWithDuration:0.5 ... ^{
// animated custom view vertically
} completion:^{
[UIView animateWithDuration:0.5 ... ^{
// animate the fade in alpha of buttons
}];
}];
它以简洁的方式提供完成处理程序。您还可以将子动画块嵌套在彼此中。
使用BeginAnimation / EndAnimation时,我不记得究竟如何为完成处理程序执行回调,但您通常会执行以下操作:
//开始动画 //设置委托 //为每个beginAnimation创建委托回调函数
现在假设您想要嵌套3或4级动画,例如复制CSS Lightbox效果:
1)淡入Lightbox容器
2)展开宽度
3)展开高度
4)淡入表格
你必须处理一些非常混乱的if-else条件。
您的工作流程如下:
“在这个beginAnimation完成之后,它向我的回调方法发送一条消息,向下滚动Xcode以找到回调委托方法,然后在回调方法中调用另一个UIView beginAnimation,向上滚动Xcode以找到下一个beginAnimation。 。“
使用基于块的动画,每个进程都封装在一个块中,您可以将其嵌套在另一个块中。如果您决定要更改订单,则会显示以下内容:
1)淡入Lightbox容器
2)此次展宽前展开高度
3)此次高度后展开宽度
4)淡入表格
使用beginAnimation方法,你会开始拉出你的头发。
希望有所帮助。
答案 1 :(得分:1)
非常方便。
使用块可以很好地改善性能。因此,不太可能。我认为动画的所有块语法都是调用旧方法(或者通过调用类似的内部方法来有效地执行),然后在执行beginAnimation和commitAnimation之间运行块。
所以,方便。无论如何,我建议仅仅因为这个原因使用它。它使用起来容易得多,并且可以很容易地嵌套动画并完成工作,因为您不需要创建其他方法来完成调用 - 它只是另一个块。