You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:18:14