3 Stimmen

Rendering einer UIView-Hierarchie in einen CGContext mit CoreAnimation Composition Model

Ich versuche, eine UIView-Hierarchie in einen CGContext oder letztlich ein UIImage zu rendern. Einige der untergeordneten Ansichten haben 3D-Transformationen, die renderInContext: zusammen mit Schatten und einigen anderen CALayer-Eigenschaften ignoriert.

Aus CALayer.h:

/*
 * WARNING: currently this method does not implement the full
 * CoreAnimation composition model, use with caution. */

- (void)renderInContext:(CGContextRef)ctx;

Ich habe mehrere Varianten ausprobiert, nachdem ein Aufruf an UIGraphicsBeginImageContext .

[self drawRect:[self bounds]];
[self.layer.delegate drawLayer:self.layer inContext:UIGraphicsGetCurrentContext()];
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
[self.layer display];

Im besten Fall wird die Ansichtshierarchie ohne 3D-Transformationen gerendert. Im schlimmsten Fall ist das Bild leer. Ich möchte am Ende einen gültigen Alphakanal im Bild haben, daher funktioniert eine Bildschirmaufnahme nicht ganz.

Gibt es eine Möglichkeit, eine UIView-Hierarchie unter Beibehaltung aller Transformationen und Ebeneneigenschaften zu rendern?

Wenn die Lösung die rekursive Iteration der Ansichtshierarchie, das separate Rendern jeder Ansicht als Bild und die Anwendung aller Transformationen und Eigenschaften in einem Kompositionsschritt für jede übergeordnete Ansicht beinhaltet, wie werden dann 3D-Transformationen angewendet?

0 Stimmen

Haben Sie mit diesem Problem jemals etwas erreicht?

0voto

Sulthan Punkte 123129

Es tut mir leid, aber es gibt keine Möglichkeit, wie Sie das tun könnten.

Der aktuelle Animationszustand einer Ebene ist privat und kann nicht eingesehen werden. Dies ist wahrscheinlich auf Leistungsgründe zurückzuführen. Die Aktivierung des Zugriffs auf unmittelbare Werte animierbarer Eigenschaften und die Speicherung der Werte in Strukturen, die mit Core Graphics kompatibel sind, würde die Grafikleistung verringern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X