मेरे पास एक कस्टम परत-समर्थित एनएसवी व्यू है और कस्टम कैलियर सबक्लास को वापस करने के लिए मेकबैकिंगलेयर विधि को ओवरराइड कर दिया है। मैंने ओवरडिन भी चाहता है अपडेट लेयर को वापस लौटने के लिए पूरी तरह से लेयर-जैसे ड्राइंग में ऑप्ट आउट करना। विधि के रूप में करने का विरोध किया updateLayer: विधिलेयर ने कस्टम कैलियर के साथ NSView का बैक अप अपडेटलायर को कॉल नहीं किया?
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 करने के लिए कॉल पाते हैं। ऐसा क्यों करता है? मेरे उदाहरण में, मैंने जांच की है कि अगर मैं makeBackingLayer
ओवरराइड हटा देता हूं तो मेरे updateLayer
को अपेक्षित तरीके से बुलाया जाता है।
मैं अपनी अंगुली को काफी नहीं डाल सकता, लेकिन अन्य उदाहरण इस धारणा को इंगित करते हैं कि जब आपके मेकबैकिंग लेयर returns a custom
कैलियर 'कि वास्तव में आपके पास कस्टम बैकिंग परत के अंदर होस्ट की गई कस्टम परत है। (मेरे हिस्से पर शुद्ध अटकलें)
आगे, क्या दो ड्राइंग मार्गों के बीच अलग-अलग प्रदर्शन विशेषताएं होंगी जो कि कैलियर के ड्रॉइन कॉन्टेक्स्ट: अधिक "निम्न-स्तर" है? उस प्रश्न पर अधिक जानकारी के लिए यह SO प्रश्न देखें: Layer-backed NSView performance with rendering directly in CALayer.drawInContext:
किसी भी अंतर्दृष्टि की सराहना की जाएगी।
मेरे पास संपत्ति ठीक है जैसा आपने ऊपर किया है। दुर्भाग्य से यह जवाब नहीं है। – Sam