Mam niestandardowy NSView z warstwą i nadpisałem metodę makeBackingLayer, aby zwrócić niestandardową podklasę CALayer. Przesłoniłem także moduł requireUpdateLayer, aby zwrócił wartość true, w ten sposób definiując w pełni rysowanie warstwowe.Powielony warstwowo NSView z niestandardową CALayer nie wywoływanie 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
}
Kiedyś to zrobić, uważam, że kiedy ustawić NSView.needsDisplay = true
trasy wzywa do drawInContext niestandardowego warstwy: metoda, w przeciwieństwie do updateLayer: metody. Dlaczego to robi? W moim przykładzie, sprawdziłem, że jeśli usunę nadpisanie makeBackingLayer
, mój updateLayer
jest wywoływany w oczekiwany sposób.
Nie mogę tego do końca określić, ale inne przypadki wskazują na to, że podczas tworzenia twojej warstwy niestandardowej hostowane są w macierzystej warstwie nośnej. (Czyste spekulacje z mojej strony)
Co więcej, czy byłyby różne charakterystyki wydajności pomiędzy dwiema trasami rysowania, biorąc pod uwagę, że CALayer's drawInContext: jest bardziej "niskiego poziomu"? Więcej informacji na ten temat można znaleźć w odpowiedzi na to pytanie: Layer-backed NSView performance with rendering directly in CALayer.drawInContext:
Każdy wgląd byłby mile widziany.
Mam nieruchomość dokładnie tak, jak masz ją powyżej. Niestety to nie jest odpowiedź. – Sam