[UIView animateWithDuration:completion:]被卡主,延迟执行了completion:回调

        视频项目中遇到一个bug,横屏播放视频时候,转到小屏后。页面卡主了,点击页面没效果。但是点击播放器可以响应。debug时候查看UI层级,发现:在转屏过程中,转屏动画没有执行完(动画的completion:)没有执行。导致一些View设置没有得到执行。

        断断续续,查了几天发现是视频弹幕的动画引起的。这里写一下伪代码:

[UIView animateWithDuration:^{
    暂停弹幕动画
} completion:^{
    View的设置
}];

弹幕动画使用的是CABasicAnimation动画:


[CATransaction begin] 
...弹幕动画
[CATransaction commit];

当视频暂停时候,动画也要暂停。使用的,只是速度设为0了。动画还在

self.layer.speed = 0.0;

        回到bug中来,转小屏时候。需要将弹幕暂停,并把弹幕和弹幕动画移除(小屏不展示弹幕),出现bug的情况,是由于没有移除弹幕动画。导致UIView的动画也卡主了。该问题不是必现,CATransaction 动画不一定卡主UIView的animate动画

        总结一下:在[UIView animateWithDuration]中执行了其他动画,如果次动画没有执行完。就会卡主。之所以延迟执行complete方法,是因为切后台后,弹幕动画会被强制移除。所以,UIView的动画complete得以执行。主界面恢复正常。

你可能感兴趣的:(Objective-C高效编程)