Kann ich die Herkunft, wenn dabei eine Drehung zu transformieren in Quartz 2D für das iPhone?
Sorry, wenn dieses offensichtlich ist oder abgedeckt anderswo, aber ich googeln den ganzen Tag und habe keine Lösung gefunden, die tatsächlich funktioniert hat.
Mein problem ist wie folgt: ich bin derzeit dabei, ein Bild in einem vollen Bildschirm UIView, für Beispiele Willen werden wir sagen, dass das Bild in der rechten unteren Ecke der UIView. Ich möchte gerne eine rotation verwandeln(CGAffineTransformMakeRotation) in der Mitte des Bildes, wird jedoch standardmäßig die rotation Befehl rotiert um das Zentrum der UIView es sich von selbst. Als ein Ergebnis, mein Bild über den Bildschirm bewegt, wenn ich drehen, statt Sie bleiben an Ort und Stelle und drehen um den eigenen Mittelpunkt.
Von dem, was ich gesammelt habe, muss ich übersetzen, meinen Kontext so, dass der Ursprung(Zentrum der UIView) ist in der Mitte von meinem Bild, Drehen, und dann wieder der Zusammenhang mit der übersetzung zurück an die ursprüngliche Stelle.
Folgenden ist die nächste Sache, die ich bekommen habe, zu arbeiten, aber das problem ist, dass, während das Bild sich dreht, bewegt es sich nach unten, während es dreht. Ich glaube, dies wird verursacht durch tweening-animation den 1. Schritt übersetzen und 3. Schritt übersetzen, statt nur die Erkenntnis, dass die anfangs-und end-Punkt auf der übersetzt wäre das gleiche...
//Before this i'd make a call to a function that draws a path to a passed in context
CGAffineTransform inverseTranslation = CGAffineTransformMakeTranslation( transX, transY );
CGAffineTransform translation = CGAffineTransformMakeTranslation( -transX, -transY );
CGAffineTransform rot = CGAffineTransformMakeRotation( 3.14 );
CGAffineTransform final = CGAffineTransformConcat( CGAffineTransformConcat( inverseTranslation, rot ), translation );
//Then i apply the transformation animation like normal using self.transform = final etc etc
Ich habe auch versucht Sachen wie CGContextTranslateCTM und CGContextSaveGState/UIGraphicsPushContext, aber diese scheinen wenig Wirkung.
Ich ve wurde kämpfen mit diesem für Tage und meine aktuelle Lösung scheint nahe, aber ich habe keine Ahnung, wie man loswerden, dass die übersetzung von "tweening". Hat jemand dafür eine Lösung oder einen besseren Weg zu gehen über diese?
[update]
Vorerst ich ziehe mein Bild zentriert in der UIview ' s center und dann die Einstellung der UIView.center-Eigenschaft, um die Herkunft würde ich gerne drehen und dann den drehen-Befehl. Scheint ein bisschen wie ein hack, aber bis ich das bekommen kann die real übersetzt, es ist meine einzige Wahl.
Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
duncanwilcox' Antwort ist die richtige, aber er ausgelassen den Teil, wo Sie den Anker von der view-Schicht zu der Stelle, die Sie wollen, zu drehen.
Dies ist hier dokumentiert: http://developer.apple.com/documentation/Cocoa/Conceptual/CoreAnimation_guide/Articles/Layers.html
Dies ist auch eine option: ein einfaches ändern der basis 😉
wo
(x,y)
ist die rotation center Sie wieDrehung geschieht um den anchorPoint der view-Schicht. Der Standardwert für den anchorPoint ist der Mittelpunkt (0.5, 0.5), also die rotation allein, ohne die übersetzungen sollten reichen.
Habe einen schnellen test und das funktioniert für mich:
Wenn Sie nicht möchten, dass eine animation, sondern nur die neue rotation, können Sie diese verwenden:
Sollte die rotation in der Tat stattfinden, um das Zentrum der UIView. Einstellung der animationDuration null garantiert kein tweening, wenn es passieren sollte.
Sicher sein, wenn Sie dies nicht tun 60 mal in der Sekunde. Es ist sehr verlockend, Spiel erstellen, wie Animationen mit diesen Werkzeugen. Diese Art von Animationen sind nicht gerade das, bedeutete für einen frame zu frame-basierte, "viele sprites Fliegen überall" - Spiel.
Dafür - und ich habe auf diesem Weg - der einzige Weg zu gehen, ist OpenGL.