开始/提交动画与基于块的动画



我仍然不明白为什么苹果不鼓励旧的动画制作方法,而是说使用块。

我的意思是,一个人如何现实地停止使用旧的方式?块不是只有 iOS> 4.0 吗?是否应该用if填充代码并根据当前设备的系统版本进行两种不同的实现?既然旧方法工作正常,为什么还要这样做?另外,底层实现应该是相同的,对吧?除了开始/提交产生丑陋的代码这一事实之外,这背后还有什么原因吗?

旧方法工作正常,但我认为对于块,您可以选择使用完成块。与旧方法一样,动画开始,代码立即恢复执行。因此,如下所示的内容仅在要移动帧的动画完成后设置视图的 alpha(在本例中为嵌套动画块)。Alpha 动画完成后,它会从超级视图中删除视图。

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationCurveEaseOut animations:^(void) {
        CGRect frame = self.actionView.frame;
        self.actionView.frame = CGRectMake(frame.origin.x, 370, frame.size.width, frame.size.height);
    }
                     completion:^(BOOL finished) {                         
                         [UIView animateWithDuration:0.2 delay:0 options:0 animations:^(void) {
                             [self.blockingView setAlpha:0];                             
                         } completion:^(BOOL finished) {
                             [self.actionView removeFromSuperview];
                             [self.blockingView removeFromSuperview];
                         }];
                     }];

您必须使用 [respondsToSelector] 来确定 UIView 是否支持块方法,如果不使用旧方法,您可能必须在时间上具有创造性来重现嵌套动画。

我仍然不明白为什么苹果 不鼓励旧的做法 动画,而是说使用 块。

Apple 希望您使用最新、最棒的技术。苹果将针对基于块的动画优化其所有新的iOS版本,并且可能只会为基于块的动画添加新的可能性。所以这就是为什么苹果把你推向基于块的动画。

我的意思是,一个人如何现实地停止使用旧的方式?块不是只有 iOS> 4.0 吗?

是的,块仅适用于 iOS> 4.0。因此,如果您的应用程序是为iOS 4.0 +设计的,则只能使用基于块的动画。或者,您可以检查块的可用性,并仅为iOS 4.0 +设备添加特定动画。

完全停止动画旧方式只有在您放弃对iOS 3的支持时才现实。

是否应该用ifs填充代码并根据当前设备的系统版本进行两种不同的实现?既然旧方法工作正常,为什么还要这样做?另外,底层实现应该是相同的,对吧?除了开始/提交产生丑陋的代码这一事实之外,这背后还有什么原因吗?

好吧,如果旧方法适合您并且您想支持较旧的(iOS 3)设备。只需使用旧的动画方式即可。它没有错,不要在你的代码中放置不必要的 if 语句。它只会让事情变得复杂,你这样做不会赢得任何东西。

如果您的应用程序是iOS 4,则带有块,则它更短且有些清洁。它也应该更容易维护,因为苹果不会继续更新旧的动画方式。

(如果将来有只能

用块做的动画,你总是可以在将来的某个地方添加 if 语句,然后使用旧方法回退到另一个不太复杂的动画。但这是未来的事情。

最新更新