[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,然后执行操作

UIView 类别 - 自定义方法不返回 UIView

IOS将UIVIew中的UIImageView扁平化为单个UIView [重复]

UIView - 啥覆盖将允许更新 UIView 框架

UIView 中的 UIView 问题