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

时间:2012-10-30 08:21:42

标签: objective-c ios cocoa core-animation

如您所知,Apple鼓励我们在iOS 4.0上使用一种名为基于块的动画的新方法。

我真的很想知道基于块的动画比开始/结束风格动画更好 性能?
并发?
编码效率和便利性?

2 个答案:

答案 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之间运行块。

所以,方便。无论如何,我建议仅仅因为这个原因使用它。它使用起来容易得多,并且可以很容易地嵌套动画并完成工作,因为您不需要创建其他方法来完成调用 - 它只是另一个块。