今天在项目中遇到一个动画的问题:请求数据之前用UI做的图片,让图片转动,数据请求之后停止图片的转动,忽然发现一直都知道怎么让动画运转起来(包括UIView的block动画和UIView直接设置属性的动画),却忽略了必要条件下,如何让动画停止下来。在网上查了些资料之后,才知道:不是简单把当前视图从父视图上remove掉或者把执行动画的视图从父视图上remove掉。正确的做法是:让执行动画的视图在layer层面上去除所有动画。
用项目中的几句代码做个小例子:
[UIView animateWithDuration:.2 animations:^{
_transIag.transform = CGAffineTransformRotate(_transIag.transform, M_PI_2);
} completion:^(BOOL finished) {
if (_isFinishedAnimation) {
[_transIag.layer removeAllAnimations];
}else{
[self transAnimationWithImage:_transIag];
}
}];
其中“_transIag”是要执行动画的一个UIImageview,“_isFinishedAnimation”是我用来判断数据是否请求完毕的一个布尔值。当数据请求完毕后执行一句代码: [_transIag.layer removeAllAnimations];这样子就能让动画停止了。