Tut mir leid, wenn das offensichtlich ist oder anderswo behandelt wird, aber ich habe den ganzen Tag gegoogelt und keine Lösung gefunden, die wirklich funktioniert hat.
Mein Problem ist wie folgt: Ich zeichne gerade ein Bild in einer Vollbild-UIView, zum Beispiel, wir sagen, das Bild befindet sich in der unteren rechten Ecke der UIView. Ich würde gerne eine Rotationstransformation (CGAffineTransformMakeRotation) in der Mitte des Bildes machen, jedoch rotiert der Rotationsbefehl standardmäßig um die Mitte der UIView selbst. Als Ergebnis bewegt sich mein Bild auf dem Bildschirm, wenn ich es rotiere, anstatt es an seinem Platz zu belassen und um seine eigene Mitte zu drehen.
Nach dem, was ich gesammelt habe, muss ich meinen Kontext so übersetzen, dass der Ursprung (Mittelpunkt der UIView) im Zentrum meines Bildes steht, Drehen, und dann den Kontext wiederherstellen, indem ich zum ursprünglichen Punkt zurückübersetze.
Das Folgende ist das nächste, was ich zur Arbeit gebracht habe, aber das Problem ist, dass sich das Bild während der Drehung nach unten bewegt, während es sich dreht. Ich denke, dass dies durch Animation Tweening der 1. Schritt übersetzen und 3. Schritt übersetzen verursacht wird, anstatt nur zu erkennen, dass der Anfang und der Endpunkt auf den Übersetzungen wäre das gleiche ...
%Vor%Ich habe auch Sachen wie CGContextTranslateCTM und CGContextSaveGState / UIGraphicsPushContext ausprobiert, aber diese scheinen wenig Wirkung zu haben.
Ich kämpfe seit Tagen damit und meine derzeitige Lösung scheint nah dran zu sein, aber ich habe keine Ahnung, wie ich dieses Übersetzungs-Tweening los werde. Hat jemand dafür eine Lösung oder einen besseren Weg?
[Aktualisierung] Momentan zeichne ich mein Bild in der Mitte der UIview zentriert und setze dann die Eigenschaft UIView.center auf den Ursprung, den ich drehen möchte, und führe dann den Befehl rotieren aus. Scheint wie ein bisschen wie ein Hack, aber bis ich die echten Übersetzungen bekomme funktioniert es ist meine einzige Wahl. Danke!
Die Drehung erfolgt um den Ankerpunkt der Ebene der Ansicht. Der Standardwert für den Ankerpunkt ist der Mittelpunkt (0,5, 0,5), daher sollte die Rotation allein ohne die Übersetzungen ausreichen.
Habe einen schnellen Test gemacht und das funktioniert für mich:
%Vor%Wenn Sie nicht möchten, dass eine Animation eintritt , sondern einfach die neue Rotation festlegen, können Sie Folgendes verwenden:
%Vor%Die Rotation sollte tatsächlich um das Zentrum der UIView stattfinden. Wenn animationDuration auf null gesetzt wird, wird garantiert, dass kein Tweening stattfindet.
Seien Sie sicher, obwohl Sie dies nicht 60 Mal pro Sekunde tun. Es ist sehr verlockend, Spiele wie Animationen mit diesen Tools zu erstellen. Diese Art von Animationen sind nicht genau für ein Frame-to-Frame-basiertes "Spiel mit vielen Sprites" gedacht.
Dafür - und ich bin diesen Weg gegangen - ist der einzige Weg zu gehen OpenGL.
Tags und Links iphone core-animation 2d quartz-graphics