我仍然不明白为什么苹果不鼓励使用旧的动画制作方法,而是说要使用块。
我的意思是,如何才能现实地停止使用旧的方式呢?块iOS不是只有4.0以上吗?是否应该使用if填充代码,并根据当前设备的系统版本进行两种不同的实现?既然旧方法工作得很好,为什么要这样做呢?另外,底层实现应该是相同的,对吧?除了begin/commit会产生丑陋的代码这一事实之外,这背后还有什么原因吗?
发布于 2011-05-25 04:31:58
我仍然不明白为什么苹果不鼓励使用旧的动画制作方法,而是说要使用块。
苹果希望你使用最新和最伟大的技术。苹果将为基于块的动画优化其所有新的iOS版本,并可能只为基于块的动画添加新的可能性。所以这就是为什么苹果将你推向基于块的动画。
我的意思是,怎样才能真正停止使用旧的方式呢?块iOS不是只有4.0以上吗?
可以,区块仅iOS > 4.0。因此,如果您的应用程序是为iOS 4.0+设计的,那么您可以使用基于块的动画。或者,您可以检查块的可用性,并仅为iOS 4.0+设备添加特定的动画。
如果您放弃对iOS 3的支持,那么完全停止使用旧的动画方式才是现实的。
应该用Is填充代码,并根据当前设备的系统版本进行两种不同的实现吗?既然旧方法工作得很好,为什么要这样做呢?另外,底层实现应该是相同的,对吧?除了begin/commit会产生丑陋的代码这一事实之外,这背后还有什么原因吗?
好吧,如果旧的方法对你来说是可以的,并且你想要支持旧的(iOS 3)设备。只需使用旧的动画方式。它没有任何问题,不要在你的代码中加入不必要的if语句。这只会让事情变得复杂,而且你这样做什么也得不到。
如果你的应用程序是iOS 4 go with blocks,它会更短,也更干净。它也应该更容易维护,因为苹果不会一直更新旧的动画方式。
(如果有只能用块做的动画,你可以在将来的某个地方添加if语句,然后用旧的方法回退到另一个不太复杂的动画。但这是未来的事情。)
发布于 2011-05-06 23:22:40
旧的方法运行良好,但我认为对于块,您可以选择使用完成块。和以前的方式一样,动画开始,代码立即恢复执行。因此,类似下面的代码仅在移动帧的动画完成后设置视图的alpha (在本例中为嵌套动画块)。一旦alpha动画完成,它将从superview中删除该视图。
[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是否支持块方法,如果不支持,则使用旧方法,并且您可能必须在重新生成嵌套动画的时间上进行创造性的选择。
https://stackoverflow.com/questions/5913131
复制相似问题