iPhone - 使用animateWithDuration而不是UIView beginAnimations有什么优势吗?

时间:2011-03-25 20:53:32

标签: iphone ios objective-c-blocks

一个简单的问题:

这是旧时尚动画的一个例子:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];

[base setTransform:rotate];
[base setCenter:newCenter];

[UIView commitAnimations];

这可以写成

[UIView animateWithDuration:0.5 animations:^{

[base setTransform:rotate];
[base setCenter:newCenter];

}];

使用这个新表单重写动画有什么好处吗?

应该有某种收获,否则Apple不会发挥这种新功能。

你们说什么?

2 个答案:

答案 0 :(得分:7)

Apple改变的不是性能,而是因为块是表达这种事情的一种更简单的方法。以前,您必须在动画完成时使用选择器等等。

所以 - 为什么要使用animateWithDuration:因为块可以节省时间,使代码更清晰,而且通常非常有用。

为什么要使用beginAnimation:因为您希望支持4.0之前的iOS版本,因为该代码不可用。 Apple仍需要提供这两种方法,因为它们需要保持向后兼容 - 但文档强烈建议您在可用且适当的情况下使用块版本的方法。

答案 1 :(得分:0)

我认为 animateWithDuration 更新,看起来更好。我使用它比 beginAnimation 更多。代码更清晰。 beginAnimation 在iOS版本低于4.0时需要兼容。

但在某些情况下,beginAnimation具有更多优势,在使用参数动画编写函数时更容易。例如:

- (void)moveSomethingWithAnimated:(BOOL)animated {

    // Do other task 1

    if( animated ) {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.2];

        someView.frame = newFrame;
        otherView.frame = newFrame;
    }

    if( animated ) {
        [UIView commitAnimations];
    }

    // Do other task 2
}

而不是:

- (void)moveSomethingWithAnimated:(BOOL)animated {

    // Do other task 1

    if( animated ) {
        [UIView animateWithDuration:0.2 animations:^{
            someView.frame = newFrame;
            otherView.frame = newFrame;
        }];
    }
    else {
        // duplicate code, or you have to write another function for these two line bellow
        someView.frame = newFrame;
        otherView.frame = newFrame;
    }

    // Do other task 2
}