一起旋转X,Y和Z轴

dur*_*zno 6 objective-c catransform3d swift

在此输入图像描述

我首先在Illustrator或Photoshop中3D旋转平面图形,获得在设计工具中应用于它的精确角度(x,y和z),然后将相同的角度应用于放置在图像顶部的UILabel,以便在视觉上同步它们.

我已经弄清楚如何使用CATransform3DConcat同时旋转2轴,但后来我不知道如何应用第三个.

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;
Run Code Online (Sandbox Code Playgroud)

编辑

现在尝试这个,但仍然没有好处.尝试了不同订单的所有组合,但没有.

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);
Run Code Online (Sandbox Code Playgroud)

dur*_*zno 4

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

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

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

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);
Run Code Online (Sandbox Code Playgroud)

我不能确切地告诉你为什么,但它可以正常旋转。