如何移除NSViewRepresentable重绘时的淡入动画?
解决ScreenCaptureKit预览重绘时的淡入动画问题
你遇到的淡入动画不是SwiftUI自动添加的,而是Core Animation对CALayer的contents属性变化默认添加的隐式过渡动画,所以用SwiftUI的.animation(nil)根本管不到这个层面的动画。
下面给你两种直接有效的解决方法:
方法一:初始化时禁用图层的contents隐式动画
在CapturePreview的初始化方法里,给contentLayer的actions字典设置为空,直接关掉contents属性的默认动画:
struct CapturePreview: NSViewRepresentable { private let contentLayer = CALayer() init() { contentLayer.contentsGravity = .resizeAspect // 禁用contents属性的隐式动画 contentLayer.actions = ["contents": NSNull()] } // 其余代码保持不变... }
方法二:修改contents时临时禁用事务动画
每次更新帧内容的时候,用CATransaction包裹修改操作,临时禁用动画:
func updateFrame(_ frame: CapturedFrame) { CATransaction.begin() CATransaction.setDisableActions(true) contentLayer.contents = frame.surface CATransaction.commit() }
两种方法任选其一就能彻底去掉那个淡入动画了。
内容的提问来源于stack exchange,提问作者Jason1923
相关产品推荐
相关产品推荐

