Ich habe eine Ansicht mit einer CATiledLayer-Unterstützung. Ich möchte die sichtbaren Kacheln aus dieser CATiledLayer-UIView übernehmen und sie einer anderen Ansicht als CALayer-Hintergrund hinzufügen, wodurch das sichtbare Bild in einer anderen UIView neu erstellt wird, die CATiledLayer nicht verwendet.
Der Grund, warum ich dies tun möchte, ist, dass ich diese zweite UIView verwenden werde, um den Effekt der Aktualisierung der CATiledLayer-gestützten UIView zu maskieren - dies erzeugt momentan ein Flimmern, wenn alle Kacheln neu geladen werden.
Das Problem ist, ich bin mir nicht ganz sicher, wie ich das machen würde. Irgendwelche Ideen?
CATiledLayer ist eine Unterklasse von CALayer, die eine Möglichkeit bietet Stellen Sie asynchron möglicherweise Kacheln des Inhalts der Ebene bereit im Cache auf mehreren Ebenen des Details.
Sie können die sichtbaren Dinge in der Ebene in einen CGContextRef mit:
rendern %Vor%Und dann verwenden Sie dies, um Ihre andere Ebene zu aktualisieren, indem Sie ihren Delegaten festlegen und das
implementieren %Vor%ss hier gezeigt Ссылка
Aber ehrlich gesagt finde ich das nicht effizient.
Dein wirkliches Problem hier ist das Flackern. Ich hatte ein ähnliches Problem in einer Ansicht mit einem benutzerdefinierten CALayer, der es unterstützte, das war Teil der Lösung: Erstellen Sie eine benutzerdefinierte Unterklasse Ihres CALayers und implementieren Sie die folgende Methode:
%Vor%Das hat eine Reihe von Problemen für mich behoben, aber möglicherweise nicht für Sie behoben. Die Alternative für Sie besteht möglicherweise darin, Transaktionen während der Aktualisierung zu deaktivieren: Aus CATransaction-Klassenreferenz
setDisableActions: Legt fest, ob Aktionen ausgelöst durch Eigenschaftenänderungen, die innerhalb dieser Transaktionsgruppe vorgenommen werden, werden unterdrückt.
Um das zu benutzen:
%Vor%Tags und Links iphone ios cocoa uiview catiledlayer