如何在后台线程上渲染 CALayer 的内容

问题描述 投票:0回答:0

我正在实现一个需要在主线程上执行绘图的 CALayer。然而,尽管将属性“drawsAsynchronously”设置为 true,绘图函数仍在主线程上被调用。这是我当前的实现:

class DKVectorLayer : CALayer {
    private let renderQueue = DispatchQueue( label: "Render queue, qos: .userInitiated)

    override func draw(in ctx: CGContext) {
        // This is still running in the main thread
    }
}

我尝试使用“renderQueue.async”将渲染代码移动到后台队列,但它似乎没有按预期工作。似乎忽略了在“renderQueue.async”闭包内执行的绘图代码,绘图发生在“draw(in:)”函数之后。

override func draw(in ctx: CGContext) {
    renderQueue.async {
        // Render code here, but it does not display on the screen
    }
}

有没有办法在后台线程上渲染 CALayer 的内容?我知道 CATiledLayer 可以在后台线程上呈现内容,但它有一些限制。比如调用“setNeedsDisplay(in: rect)”时,忽略指定的矩形,重绘所有tile。

swift core-animation calayer
© www.soinside.com 2019 - 2024. All rights reserved.