请浏览图片。
所以这是我从一些在线资源获得的代码,它确实改变了我的对象。除此之外,我什么都不懂。我是CATransform3D的新手,想知道它是如何工作的。
CATransform3D transform = CATransform3DIdentity;
transform.m34 = 1.0 / -500;
transform = CATransform3DRotate(transform, 45.0f * M_PI / 180.0f, 0, 1, 0.0f);
_bgView.layer.transform = transform;
我想知道这段代码是如何运行的? 为什么我们在m34中设置了一些值?我发现它的某种矩阵甚至让我更加困惑。此外, CATransform3DRotate 中的参数是什么意思???
我想了解但没有进一步。
我想深入了解CATransform3D。请帮助处理任何文章,文档或解释自己。
非常感谢。
答案 0 :(得分:33)
我不确定m34
是什么,不看。
2D旋转很容易,因为它只需要一个旋转的角度。然后围绕Z轴(即直接指向屏幕的轴)完成旋转。
3D旋转不同。它需要一个角度,但它需要知道你在哪个轴(或多个轴)旋转。
在CATransform3DRotate
中,您可以给它五个参数......
角度(以弧度表示)π弧度= 180度 3,4和5是应用于每个轴的角度旋转的多少。
X轴 - 这是从屏幕左侧到屏幕右侧的轴。
您在示例中应用的旋转如下...
角度= 45度(转换为弧度)。 X = 0 Y = 1 Z = 0
这意味着所有45度都将围绕Y轴旋转。也就是说它会像一个旋转门一样绕着它的中间线旋转。
如果你有参数......最后的“1,0,0”那么它会像桨船桨一样旋转。 “离你而去。”
最后,如果你有“0,0,1”,它会像屏幕上的凯瑟琳轮一样旋转。
您也可以组合这些值,即使用“0,1,1”来应用围绕两个轴的旋转。
矩阵的w行是透视投影。您是否曾在学校进行透视绘图,在那里放置一个圆点并从圆点绘制线条,然后画出适合这些线条的东西来给它透视?那么m34值决定了点的放置位置,因此提供了透视图。将它设置为类似-50的东西,你会看到更大的差异。
设置m34与此点的Z轴值有关。所以这一点放在(0,0,-1 / 500)
答案 1 :(得分:9)
m34
值是第三行,第四列,是实际给出旋转透视图的变换后面的矩阵中的值。
您可以在Wikipedia上阅读有关矩阵乘法背后的数学的更多信息。
关于CATransform3DRotate(...)
的值。
答案 2 :(得分:4)
以下是Swift https://github.com/paulz/PerspectiveTransform中的项目,它有助于计算CATransform3D并包含示例应用和游乐场。
它可用于为CALayer转换属性设置动画。
有关构建矩阵和其他可能解决方案的详细信息,请参阅wiki:https://github.com/paulz/PerspectiveTransform/wiki。
感谢您提出这个问题,它帮助我开始了解我的项目,不仅知道我有这个问题!