Frage

Meine usercase ist eine iPhone-Anwendung, wo ich auf der Skala, Rotation und Translation eines Bild eine Animation zu tun.

Also, ich concat alles und ihn an die Eigenschaft verwandeln, aber es gibt ein Problem:

Da meine Bilder in der Größe variieren, es ist ein Problem, sie richtig zu positionieren. Ich bin auf eine umgekehrte Y-Achse verwendet Koordinatensystem, so möge ich mein Bild exakt positionierten auf 60 Pixel in der y-Achse.

Also, wie ich aus der ursprünglichen kartesischen y-Achse zu einer invertierten y-Achse Sicht ändern?

War es hilfreich?

Lösung

Wie smacl weist darauf hin, ist der einfachste Weg, dies zu tun, ist Ihren Ursprung nach unten links auf dem Bildschirm zu verschieben, indem Sie (screen - viewheight - y). Statt y in den Ursprüngen Ihrer Ansichten

Sie können jedoch das Koordinatensystem der Hauptansicht der Schichten Flip einen CATransform3D verwenden. Ich dies tun, so dass ich den gleichen Core Animation CALayer Layout-Code zwischen meiner iPhone-Anwendung und einem Mac-Client gemeinsam nutzen kann (das iPhone kehrt die normale Quarz-Koordinatensystem für CALayers dass der UIViews entsprechen). Alles, was Sie tun müssen, um dies zu ermöglichen ist die Linie zu platzieren

self.layer.sublayerTransform = CATransform3DMakeScale(1.0f, -1.0f, 1.0f);

in Ihrem Initialisierungscode für Ihre Schicht-Hosting UIView. Denken Sie daran, dass dies Ihr CALayers Flip wird, so dass jeder UIKit Textdarstellung in diesen Schichten müssen unter Umständen auch ähnlich wie im folgenden unter Verwendung von Code gespiegelt werden:

CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0f, self.frame.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);

UIFont *theFont = [UIFont fontWithName:@"Helvetica" size:fontSize];
[text drawAtPoint:CGPointZero withFont:theFont];

CGContextRestoreGState(context);

Sie können eine ähnliche Art von Inversion tun, um eine CGAffineTransform, aber Sie werden auch eine Übersetzung anwenden müssen, um diese Arbeit zu machen:

CGAffineTransform flipTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
flipTransform = CGAffineTransformScale(flipTransform, 1.0f, -1.0f);

Unter Umständen können Sie die affine verwenden verwandeln Sie Ihren Ursprung konvertieren Koordinaten mit CGPointApplyAffineTransform ().

Andere Tipps

Für jeden y Ordinate, y = top-y, wo oben ist die y-Ordinate des oberen Rand des Begrenzungsrahmens in Sie zeichnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top