我有一個自定義層支持的NSView,並且已經使用makeBackingLayer方法來返回一個自定義的CALayer子類。我也重寫wantUpdateLayer來返回true,從而完全選擇層狀繪圖。圖層支持NSView與自定義CALayer不調用updateLayer?
override func makeBackingLayer() -> CALayer {
return Layer() // my custom class with "drawLayer:" implemented
}
override var wantsUpdateLayer:Bool{
return true
}
// never called
override func updateLayer() {
super.updateLayer()
println("updateLayer after")
self.layer?.borderWidth += 1
}
一旦我這樣做,我發現,當我設置NSView.needsDisplay = true
其呼叫路由到定製層的drawInContext:方法:爲反對updateLayer方法。 它爲什麼這樣做?在我的例子中,我檢查瞭如果我刪除了makeBackingLayer
覆蓋,我的updateLayer
以預期的方式被調用。
我不能完全明白這一點,但其他實例指出,當您的makeBackingLayer圖層爲CALayer時,您實際上已將自定義圖層託管在父支持圖層內。 (對我而言,純粹的猜測)
此外,考慮到CALayer的drawInContext:更「低級」,兩種繪製路線之間會有不同的性能特徵嗎?看到這個問題的更詳細的問題:Layer-backed NSView performance with rendering directly in CALayer.drawInContext:
任何有識之士將不勝感激。
我的財產就像上面那樣。不幸的是,這不是答案。 – Sam 2015-03-19 10:57:35