入力として CATransform3D 構造体を指定して、Z 軸を中心としたラジアン単位の回転を計算するにはどうすればよいですか?
基本的に私が必要とするのは、の逆ですCATransform3DMakeRotation。
入力として CATransform3D 構造体を指定して、Z 軸を中心としたラジアン単位の回転を計算するにはどうすればよいですか?
基本的に私が必要とするのは、の逆ですCATransform3DMakeRotation。
回転を行う軸によって異なります。
z 軸を中心とした回転は、次のように表されます。
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)
したがって、角度はa = atan2(transform.m12, transform.m11); でなければなりません。
x 軸を中心とした回転:
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)
y 軸を中心とした回転:
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)
変換がレイヤーにアタッチされている場合、次のように回転の値を取得できます。
CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];
ドキュメントから:
Core Animation はキー値コーディング プロトコルを拡張して、キー パスを通じてレイヤーの CATransform3D マトリックスの共通値を取得および設定できるようにします。表 4 は、レイヤーの transform プロパティと sublayerTransform プロパティがキー値コーディングおよび観察準拠であるキー パスを示しています。