Versuche, eine Karte aus CALayers zu erstellen, die umgedreht werden kann

8

Ich habe versucht, ein CALayer basiertes "CardView" -Objekt zu entwickeln, das zwei Ebenen hat, die voneinander abgewandt sind, um die zwei Seiten einer Karte darzustellen. Ich habe mit Dingen wie der doublesided -Eigenschaft von CALayer gearbeitet und finde die Ergebnisse verwirrend. Meine Basisklasse ist CALayer und ich füge zwei sublayers hinzu, eine mit einer M_PI / 2 Transformation und beide mit doublesided = NO , aber wie es aussieht, bekomme ich die Front, egal wie ich die Karte rotiere und die Rückseite zeigt überhaupt nicht. Wenn ich die Vorderseite nicht erstelle, wird die Rückseite durch beide Seiten und der Text ist in einer Ecke, nicht 48 Punkte und verschwommen.

Hier ist ein Link zu einem Screenshot, der zeigt, wie die Karte in UIViewController's view gerade eine volle Umdrehung beendet hat. Du siehst die Rückseite der Front. Dies sollte unsichtbar sein, und die Rückseite sollte zeigen ... Ich denke ...

Ссылка

%Vor% %Vor%
Steve 30.09.2010, 15:02
quelle

3 Antworten

23

Der Trick bestand darin, CATransformLayer. zu verwenden. Dies ist eine Ebene, die nur dazu dient, andere Ebenen zu enthalten (Dinge wie backgroundColor oder borderWidth ). Es behält jedoch die wahre 3D-Beziehung seiner Kindschichten bei (d. H. Es glättet sie nicht wie eine normale CALayer ). Sie können also zwei Ebenen erstellen, eine spiegeln und ihre zPosition nur um eine Haarfarbe versetzen und beide in eine CATransformLayer setzen. Jetzt können Sie diese übergeordnete Ebene sechs Mal ab Sonntag spiegeln und die untergeordneten Ebenen bleiben fest miteinander verbunden und werden immer richtig gerendert . Ziemlich süß und wenig Overhead!

    
Steve 06.10.2010, 13:50
quelle
1

Es gibt eine viel einfachere Möglichkeit, dies zu tun, solange Sie nur versuchen, einen normalen "Flip" zu machen.

Schauen Sie in das UIView-Animationssystem und es gibt eine 'transitionWithView'. Sie können dort eine Flip-Animation anwenden, und es wird den gleichen Effekt mit fast keine Arbeit bieten.

    
Joshua Weinberg 30.09.2010 18:08
quelle
0

Ich habe auch viele der Versionen für UIView gelesen. Nachdem ich sie alle zusammengefügt habe, ist das was ich habe und es funktioniert.

Zur Einrichtung stelle ich

ein

1) Die Karte unter Interface Builder mit einem View-Objekt, das ein UIImageView-Objekt enthält, das die Vorderseite der Karte anzeigt. so View- & gt; View- & gt; UIImageView- & gt; Bilddatei von Vorderseite der Karte

2) Dann wird das View-Objekt, das UIImageView enthält, in UIController Class geändert (damit es auf Berührungen reagiert).

3) In der Header-Datei des Viewcontrollers habe ich das mit dem UIImageView verknüpfte IBOutlet UIImageView cardView und eine mit dem View-Objekt (das jetzt ein UIController-Objekt ist) verknüpfte IBAction-FlipCard über das Ereignis "touch down" erstellt.

4) IBAction flipCard wird implementiert, indem dynamisch ein weiteres Subview-View-Objekt erstellt wird, das ein anderes UIImageView enthält, aber mit dem Backside-Image initalisiert wird.

5) mit CGRect, der Rahmen und die Mitte des Rückseitenobjekts sind mit der Vorderseite ausgerichtet.

6) dann werden die Animationsmethoden von UIView aufgerufen, um die Subviews mit Animation zu tauschen.

Und das macht den Trick.

Ich bin gerade nicht bei meinem Mac, also habe ich die Codes nicht. Wenn jemand interessiert ist, kann ich es später veröffentlichen.

    
boobami 29.12.2011 03:59
quelle