[UIView animateWithDuration:completion:]被卡主,延迟执行了completion:回调
Posted hherima
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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得以执行。主界面恢复正常。
以上是关于[UIView animateWithDuration:completion:]被卡主,延迟执行了completion:回调的主要内容,如果未能解决你的问题,请参考以下文章
在 UIView2 上方显示 UIView1,但在 UIView1 上方显示 UIView2 输入方式
统计从多个 UIView 中随机抽出的 UIView 数量,即:从 9 个 UIView 中随机抽出 5 个 UIView,然后执行操作