如果对一个UIView做一个动画,刚开始都是用最原始的写法:

在[UIView beginAnimations:nil context:NULL] 后设置好动画的一些属性之后,[UIView commitAnimations]然后播放,之后用了Block之后发现原来可以这么简单,最简单的动画一句话就可以搞定

+ (void)animateWithDuration:(NSTimeInterval)duration 
				  animations:(void (^)	(void))animations

于是就一直这么用了。但直到前几天才发现如果这么用的话,应用在5.0之前的系统跑可能是有问题的。

假如我们在播放动画的同时,需要相应交互的事件,那么5.0之前就必须设置相应的UIViewAnimationOptions,

+ (void)animateWithDuration:(NSTimeInterval)duration
				      delay:(NSTimeInterval)delay
			        options:(UIViewAnimationOptions)options 
				 animations:(void (^)(void))animations 
  				 completion:(void (^)(BOOL finished))completion

因为在5.0之前,动画播放的时候,系统会把整个应用内所有的事件相应都停止,在苹果的官方document里也可以找到说明:

During an animation, user interactions are temporarily disabled for the views being animated. (Prior to iOS 5, user interactions are disabled for the entire application.)

假设你的动画时间很长(循环播放淡出淡出等等),那有会造成界面好像卡在那边,不管你怎么点击,事件都不会得到相应。(stackOverFlow)





blog comments powered by Disqus

Published

08 January 2013

Tags