Frage

Wie berechne ich die Rotation in Radianten um die Z-Achse durch eine CATransform3D Struktur als Eingang zu geben?

im Grunde, was ich brauche, ist umgekehrt von CATransform3DMakeRotation.

War es hilfreich?

Lösung

Es hängt davon ab, was der Achse Sie die Rotation tun auf.

Drehung um die Z-Achse wird dargestellt als:

a  = angle in radians
x' = x*cos.a - y*sin.a
y' = x*sin.a + y*cos.a
z' = z

( cos.a  sin.a  0  0)
(-sin.a  cos.a  0  0)
( 0        0    1  0)
( 0        0    0  1)

so sollte Winkel a = atan2 (transform.m12, transform.m11);

Eine Drehung um x-Achse:

a  = angle in radians
y' = y*cos.a - z*sin.a
z' = y*sin.a + z*cos.a
x' = x

(1    0      0    0)
(0  cos.a  sin.a  0)
(0 -sin.a  cos.a  0)
(0    0     0     1)

Drehung um Y-Achse:

a  = angle in radians
z' = z*cos.a - x*sin.a
x' = z*sin.a + x*cos.a
y' = y

(cos.a  0  -sin.a   0)
(0      1    0      0)
(sin.a  0  cos.a    0)
(0      0    0      1) 

Andere Tipps

Wenn die Transformation zu einer Schicht angebracht ist, dann können Sie den Wert der Rotation erhalten wie folgt:

CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];

Von der Dokumentation

  

Core Animation erweitert das Schlüsselwertkodierungsprotokoll zu ermöglichen, Abrufen und Festlegen des gemeinsamen Wertes einer CATransform3D Matrix der Schicht durch Schlüsselweg. Tabelle 4 beschreibt die Schlüsselwege, für die eine Schicht ist, zu transformieren und sublayerTransform Eigenschaften sind der Schlüssel-Wert-Codierung und Beobachten konformen

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