3

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

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

4

2 回答 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) 淡入灯箱容器

2) 展开宽度

3) 展开高度

4) 淡入淡出形式

您必须处理一些非常混乱的 if-else 条件。

您的工作流程如下:

“在这个 beginAnimation 完成后,它会向我的回调方法发送一条消息,向下滚动 Xcode 以找到回调委托方法,然后在回调方法中调用另一个 UIView beginAnimation,向上滚动 Xcode 以找到下一个 beginAnimation ...”

使用基于块的动画,每个进程都封装在一个块中,您可以将其嵌套在另一个块中。如果您决定要更改顺序,则显示如下:

1) 淡入灯箱容器

2) 这次在 Width 之前展开 Height

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

4) 淡入淡出形式

使用 beginAnimation 方法,您将开始拔毛。

希望有帮助。

于 2012-10-30T08:48:22.447 回答
1

很大程度的方便。

使用块几乎无法提高性能。所以这不太可能。我原以为动画的所有块语法都是调用旧方法(或通过调用类似的内部方法有效地做到这一点),然后在执行 beginAnimation 和 commitAnimation 之间运行块。

所以,方便。无论如何,我建议单独使用它。它更易于使用,并且可以轻松嵌套动画并在完成时执行操作,因为您无需创建其他方法来在完成时调用 - 它只是另一个块。

于 2012-10-30T08:52:00.423 回答