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

3

正如您所知,苹果鼓励我们在iOS 4.0及以上版本使用一种称为基于块的动画的新方法。

我很想知道基于块的动画相比起begin/end样式动画更加优越,比如:

       
  • 性能?
  •    
  • 并发?
  •    
  • 编码效率和便利性?

非常开放式的问题。“因为块规则”怎么样? - borrrden
因为块可以放置在事件队列上,并且可以通过运行时更有效地管理。 - deleted_user
2个回答

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

主要是为了方便。

使用块不会有太多性能改进。所以这方面可能没什么变化。我认为所有用于动画的块语法只是调用旧方法(或通过调用类似的内部方法实现),并在你执行beginAnimation和commitAnimation之间运行块。

所以,主要是为了方便。我建议出于这个原因而使用它。它更容易使用,使嵌套动画和完成后执行其他操作变得容易,因为您不需要创建其他方法来调用完成 - 它只是另一个块。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接