图中显示了应用以下转换后的简单UIView:
- (CATransform3D) transformForOpenedMenu
{
CATransform3D transform = CATransform3DIdentity;
transform.m34 = -1.0 /450;
transform = CATransform3DRotate(transform, D2R(40), 0, 1, 0);
transform = CATransform3DTranslate(transform, 210, 150, -500);
return transform;
}我试图使黑色突出显示的距离具有相等的长度。你能帮我理解数值和计算背后的逻辑吗?
干杯
UPD 9月13日
看起来,移除3DTranslate使距离保持相等。我看到我可以使用层的框架属性将旋转的视图重新定位到屏幕的左下角。还不确定,但这可能真的有效。

发布于 2014-10-01 10:44:56
好吧,最后解决了我的问题是:
transform = CATransform3DRotate(transform, D2R(40), 0, 1, 0);一样摆动targetView.layer.anchorPointZ = 850;newPosition.x += 135 * positionDirection; newPosition.y += 70 * positionDirection;这个序列可以在没有CATransform3DTranslate的情况下调整位置,并保持“摇摆”效果不失真。
谢谢大家!
发布于 2014-09-12 04:25:16
您设置的.m34值最好是在包含视图的sublayerTransform上设置,而不是在正在转换的视图上设置。
我不完全理解仿射变换背后的数学,所以我制作了这个项目,它允许我使用变换值来达到我想要的效果。您可以插入上面代码中的值,并查看它的外观,但请注意,已经有一个使用上面提到的sublayerTransform属性应用的透视图值。
对于您的具体情况,我认为您希望将该层的锚点调整为(0.00.5),并仅应用旋转转换。这假设你希望菜单像门一样向后摆动,铰链在左边边缘。
发布于 2014-09-12 21:02:03
您所看到的问题是由您的CATransform3DTranslate电话引起的。您实际上是将Y轴设置为偏离中心,从而看到了框架的不同透视图。
把它想成这样;
你站在一片狭长的田野中间,伸向地平线。该字段的边缘看起来就像它是收敛到一个中心点在远处的某个地方。如果你在场的中心,每个边到会聚点的角度就会出现相等。另一方面,如果你向左或向右移动,角度就会改变,其中一个看起来比另一个大(当然,相反)。
从本质上说,这就是您的视图所发生的事情;由于您的汇合点位于右侧,所以将Y轴从0改为0将与在上面的示例中向左或向右移动具有相同的效果。你不再看中间的平行线了。
因此,在上面的代码中,将CATransform3DTranslate中的ty设置为0应该可以解决您的问题,即。
transform = CATransform3DTranslate(transform, 210, 0, -500);您还可能需要更改tz和tx值以使其适合。
https://stackoverflow.com/questions/25622909
复制相似问题