UIView动画失效
我们一般在做简单动画时,可以用UIView 提供的[UIView animateWithDuration: animations:]等方法,来设置一些简单的动画。但是有时候动画效果会失效。
某个项目中在tableViewCell上使用此方法设置动画时,第一次加载cell时会出现动画失效问题,就会出现所有动画效果duration=0的效果;也就是没有动画效果直接显示设置的值。
WTF ! ! 代码都是常规操作啊,为什么会失效呢?于是各种尝试,把UIView关于动画的属性和方法试了很多。终于发现问题,原来系统不知什么时候把UIView的areAnimationsEnabled值给设置成了NO,这个值在view创建处理默认是YES;
推测原因:多个nsthread同时处理并在thread中改界面是会造成动画丢失的
解决方法:
解决方法一:
调用UIView的 setAnimationsEnabled方法。
[UIView setAnimationsEnabled:YES];
解决方法二:
将动画代码显式的放在主线程中
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"线程 %@",[NSThread currentThread]);
[UIView animateWithDuration:4 animations:^{
NSLog(@"UIView.areAnimationsEnabled==%d",UIView.areAnimationsEnabled);
self.blockView.tyu_width = blockW;
} ];
});