应用透视变换而不旋转。

4
我一直在尝试对UIView执行透视变换。我参考了这个示例
然而,该示例不仅应用了旋转,还应用了透视变换。有没有一种方法可以在没有旋转的情况下改变视图的透视?可能看起来像这样: enter image description here 我一直在尝试删除旋转,但是当我这样做时,透视变换就不会被应用。我找不到任何处理仅更改透视的示例。提前感谢。
2个回答

7

补充一下David的回答:如要得到和您图片中一样的输出,您需要将视图绕x轴(水平轴)旋转,使得视图矩形的上边缘比下边缘“远离”观察者,例如:

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / -200;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, 45.0f * M_PI / 180.0f, 1.0f, 0.0f, 0.0f);
layer.transform = rotationAndPerspectiveTransform;

@martinr 我使用了你的技巧,但是我没有得到透视旋转。我的视图是平面的(似乎到处距离都相同..) - Van Du Tran
@VanDuTran:嗯,它是3D变换矩阵中的一个组件之一 :) 我不确定我能否解释清楚,而且无论如何,这对于一个评论来说太复杂了。你应该在互联网上找到相关信息。 - Martin R
我现在搞定了!但是,我遇到了一个奇怪的效果。我有一个矩形,其中锚点位于底部中间。当我将矩形旋转时,它看起来很好。但是当我将矩形朝向自己旋转时,矩形变得非常大,超出了屏幕..就像它要掉在我的头上一样!你知道如何修复这个效果吗? - Van Du Tran
好的,我发现了。小于0.34,就会减弱那种影响。 - Van Du Tran

0

如果相对于您的视点没有旋转,则透视图不会可见。即使您不旋转,透视图仍然会被应用,但不会很明显。

另一个显示透视的变换是沿Z轴平移,这使视图看起来像被缩放了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接