一个简单的问题:
这是旧时尚动画的一个例子:
[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不会发挥这种新功能。
你们说什么?
答案 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
}