Layer-unterstütztes NSView mit benutzerdefiniertem CALayer, der nicht updateLayer aufruft?

8

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.

    
Sam 19.03.2015, 09:25
quelle

2 Antworten

2

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 seine drawRect: -Methode, um den Inhalt zu zeichnen.

    
Fernando Olivero 21.02.2016 20:07
quelle
0

Haben Sie vergessen, die Eigenschaften layerContentsRedrawPolicy und wantsLayer festzulegen?

%Vor%     
Astoria 19.03.2015 10:48
quelle