我正在实现一个需要在主线程上执行绘图的 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。