我正在尝试使用CATransform3D向视图中添加透视图。目前,我得到的是:

这就是我想要得到的:

我很难做到这一点。我完全迷失在这里了。下面是我的代码:
CATransform3D t = CATransform3DIdentity;
t.m11 = 0.8;
t.m21 = 0.1;
t.m31 = -0.1;
t.m41 = 0.1;
[[viewWindow layer] setTransform:t];发布于 2012-03-31 02:27:28
矩阵元素.m34负责透视。文档中并没有对此进行过多讨论,因此您将不得不玩弄它。这个答案略微谈到了如何使用它:https://stackoverflow.com/a/7596326/1228525
要真正看到这个矩阵的效果,你需要做两件事: 1.将透视矩阵应用于父视图的子层变换2.旋转子视图(你想要透视的那个视图)-否则它将保持平坦,你不能告诉它现在有一个3D透视。
这些数字是任意的,让它们看起来最好:
CATransform3D t = CATransform3DIdentity;
t.m34 = .005;
parentView.layer.sublayerTransform. = t;
childview.layer.transform = CATransform3DMakeRotation(45,1,0,0); 根据子视图在父视图中的位置,透视图看起来会有所不同。如果子对象位于父对象的中心,就像您直接在3D中查看子对象视图一样。它离中心越远,就越像是从一个扫视的角度观察。
这是我使用上面的代码和居中的子视图得到的:(显然,我不允许发布图片,因为我是新的,所以你必须看到链接) http://i.stack.imgur.com/BiYCS.png
根据这些图片很难判断你想要什么;如果我的答案不是你想要的,多一点解释可能会有所帮助。从我的照片上可以看出,最下面的那个不是透视图...
发布于 2015-07-22 08:58:42
我能够使用AGGeometryKit轻松地实现正确的CATransform3D。
#import <AGGeometryKit/AGGeometryKit.h>
UIView *view = ...; // create a view
// setting anchorPoint to zero
view.layer.anchorPoint = CGPointZero;
view.layer.transform = CATransform3DMakeTranslation(-view.layer.bounds.size.width * .5, -view.layer.bounds.size.height * .5, 0);
// setting a trapezoid transform
AGKQuad quad = view.layer.quadrilateral;
quad.tl.x -= 10; // shift top left x-value with 10 pixels
view.layer.quadrilateral = quad; // the quad is converted to CATransform3D and appliedhttps://stackoverflow.com/questions/9946895
复制相似问题