11

如何通过将 CATransform3D 结构作为输入来计算围绕 Z 轴的弧度旋转?

基本上我需要的是相反的CATransform3DMakeRotation.

4

2 回答 2

27

这取决于您在哪个轴上进行旋转。

绕 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) 
于 2010-10-15T03:05:41.653 回答
17

如果将变换附加到图层,则您可以获得旋转的值,如下所示:

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

文档中:

Core Animation 扩展了键值编码协议,允许通过键路径获取和设置层的 CATransform3D 矩阵的公共值。表 4 描述了层的 transform 和 sublayerTransform 属性符合键值编码和观察的关键路径

于 2012-03-15T00:47:43.350 回答