一起旋转 X、Y 和 Z 轴

Rotate X, Y and Z axis all together

我首先在 Illustrator 或 Photoshop 中对平面图形进行 3D 旋转,在设计工具中获取应用到它的确切角度(x、y 和 z),然后将相同的角度应用到放置在图像顶部的 UILabel使它们在视觉上同步。

我已经想出如何使用 CATransform3DConcat 同时旋转两个轴,但我不确定如何应用第三个轴。

float angleX = -18 * M_PI / 180;
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0);
float angleY = -26 * M_PI / 180;
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0);
CATransform3D combo1 = CATransform3DConcat(t1, t2);
self.labelPlay.layer.transform = combo1;

编辑

现在正在尝试,但还是不行。 尝试了不同订单的所有组合,但一无所获。

float angleX = -18 * M_PI / 180;
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0);
float angleY = -26 * M_PI / 180;
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0);
float angleZ = 8 * M_PI / 180;
CATransform3D t3 = CATransform3DMakeRotation(angleZ, 0, 0, 1);

self.label.layer.transform = CATransform3DConcat(CATransform3DConcat(t3, t2), t1);

我不太确定,但我想可能就是这样。

对于设计师来说,在 Illustrator/Photoshop 中考虑 3D 旋转的角度只适用于 CATransform3D,这几乎是正确的,但您可能需要更改一件小事。

假设您的设计工具中有 x : -18、y : -26 和 z : 8。将 y 和 z 切换为 positive/negative 解决了我的问题。所以现在我有 -

float angleX = -18 * M_PI / 180;
CATransform3D t1 = CATransform3DMakeRotation(angleX, 1, 0, 0);
float angleY = 26 * M_PI / 180;
CATransform3D t2 = CATransform3DMakeRotation(angleY, 0, 1, 0);
float angleZ = -8 * M_PI / 180;
CATransform3D t3 = CATransform3DMakeRotation(angleZ, 0, 0, 1);

self.label.layer.transform = CATransform3DConcat(CATransform3DConcat(t1, t2), t3);

我不能告诉你确切的原因,但这个旋转正确。