iPhoneSDK berechnen Drehwinkel von CATransform3D
-
01-10-2019 - |
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
.
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