Ich habe ein benutzerdefiniertes Layer-gesichertes NSView und habe die makeBackingLayer-Methode überschrieben, um eine benutzerdefinierte CALayer-Unterklasse zurückzugeben. Ich habe auch willedUpdateLayer überschrieben, um wahr zurückzugeben, wodurch ich mich vollständig für schichtartiges Zeichnen entschieden habe.
%Vor% Sobald ich das getan habe, finde ich, dass ich, wenn ich NSView.needsDisplay = true
einstelle, Aufrufe an die drawInContext: -Methode der benutzerdefinierten Ebene im Gegensatz zur updateLayer: -Methode weiterleite. Warum tut es das? In meinem Beispiel habe ich überprüft, dass mein makeBackingLayer
in der erwarteten Weise aufgerufen wird, wenn ich die updateLayer
überschreiben lösche.
Ich kann es nicht genau sagen, aber andere Beispiele deuten darauf hin, dass Sie bei Ihrer makeBackingLayer returns a custom
CALayer Ihre benutzerdefinierte Ebene in einer übergeordneten Sicherungsschicht gespeichert haben. (Reine Spekulation meinerseits)
Würde es außerdem zwischen den beiden Zeichnungsrouten unterschiedliche Leistungsmerkmale geben, da CALayers drawInContext: eher "low-level" ist? Weitere Informationen zu dieser Frage finden Sie in dieser SO-Frage: Layer -backed NSView-Leistung mit dem Rendern direkt in CALayer.drawInContext:
Jede Einsicht würde sehr geschätzt werden.
Sicherlich haben Sie es inzwischen behoben, aber für zukünftige Leser habe ich eine mögliche Erklärung gefunden, indem ich die NSView-Dokumentation !
Wenn die Eigenschaft
canDrawSubviewsIntoLayer
auf YES gesetzt ist, wird die Ansicht angezeigt ignoriert den von dieser Methode zurückgegebenen Wert. Stattdessen die Ansicht immer verwendet seinedrawRect:
-Methode, um den Inhalt zu zeichnen.
Tags und Links core-animation cocoa calayer nsview appkit