Entschuldigung, wenn das offensichtlich ist oder anderswo behandelt wird, aber ich google den ganzen Tag und habe keine Lösung gefunden, die tatsächlich funktioniert hat.Kann ich den Ursprung verschieben, wenn ich eine Transformation in Quartz 2D für das iPhone mache?
Mein Problem ist wie folgt: Ich zeichne derzeit ein Bild in einem Vollbild UIView, zum Beispiel werden wir sagen, das Bild befindet sich in der unteren rechten Ecke des 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 mich drehe, anstatt dass es an seinem Platz bleibt und sich um sein eigenes Zentrum dreht.
Von dem, was ich gesammelt habe, muss ich meinen Kontext übersetzen, so dass der Ursprung (Mittelpunkt der UIView) in der Mitte meines Bildes ist, Drehen, und dann den Kontext wiederherstellen, indem Sie zurück zum ursprünglichen Punkt.
Das Folgende ist das nächste, was ich habe zu arbeiten, aber das Problem ist, dass während das Bild rotiert, es bewegt sich nach unten, während es dreht. Ich denke, das durch Animation verursacht wird Tweenen der 1. Schritt übersetzen und dritter Schritt übersetzen, anstatt nur zu realisieren, dass der Anfang und Endpunkt auf den übersetzt das gleiche sein würde ...
// 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 zu haben.
Ich habe seit Tagen damit zu kämpfen und meine aktuelle Lösung scheint in der Nähe, aber ich habe keine Ahnung, wie man das Übersetzen Tweening loswerden. Hat jemand eine Lösung dafür oder einen besseren Weg?
[update] Momentan zeichne ich mein Bild in der Mitte der UIview zentriert und setze dann die UIView.center-Eigenschaft auf den Ursprung, den ich drehen möchte, und dann den Drehbefehl. Scheint wie ein bisschen wie ein Hack, aber bis ich die echten Übersetzungen bekomme funktioniert es ist meine einzige Wahl. Danke!
kurzer Kommentar - bearbeitet, um zu zeigen, dass Sie math.h-Konstanten verwenden sollten, wenn Sie mit pi-Werten arbeiten. M_PI_4, M_PI_2, M_PI sind besser und genauer als alle Rundungsfehler :) –