设置AVPlayerLayer的.isHidden为何触发溶解动画?如何阻止?
嘿,这个场景我之前做视频播放器时也碰到过!先给你拆解下:
为什么会出现溶解淡出动画?
这是AVPlayerLayer的默认行为——AVFoundation框架为了让媒体层的显示/隐藏过渡更平滑,内部在处理isHidden属性变化时,自动给layer加了一个渐隐的隐式动画。普通的CALayer设置isHidden不会有这个效果,这是AVPlayerLayer针对媒体展示做的特殊优化。
怎么阻止这个动画?
给你两种常用的解决方式,按需选择:
方式一:临时禁用隐式动画(单次生效)
如果只是这次隐藏不需要动画,用CATransaction包裹属性修改,直接关掉系统的隐式动画:
CATransaction.begin() CATransaction.setDisableActions(true) playerLayer.isHidden = true CATransaction.commit()
这样修改后,playerLayer会立刻隐藏,没有任何过渡效果。
方式二:永久禁用该动画(全局生效)
如果后续这个playerLayer的所有隐藏/显示操作都不需要动画,可以直接修改它的actions字典,把hidden对应的动画设为空:
playerLayer.actions = ["hidden": NSNull()]
设置后,不管你什么时候改isHidden,都不会再触发默认的溶解动画了。
额外小提示
要是你想替换成自己的自定义动画,也可以在CATransaction里添加你想要的动画逻辑,系统的默认动画会被覆盖掉~
内容的提问来源于stack exchange,提问作者user11182249
相关产品推荐
相关产品推荐

