首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CATransform3D变换

CATransform3D变换
EN

Stack Overflow用户
提问于 2012-03-31 00:28:42
回答 2查看 2.4K关注 0票数 1

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

这就是我想要得到的:

我很难做到这一点。我完全迷失在这里了。下面是我的代码:

代码语言:javascript
复制
CATransform3D t = CATransform3DIdentity;
    t.m11 = 0.8;
    t.m21 = 0.1; 
    t.m31 = -0.1; 
    t.m41 = 0.1;
    [[viewWindow layer] setTransform:t];
EN

回答 2

Stack Overflow用户

发布于 2012-03-31 02:27:28

矩阵元素.m34负责透视。文档中并没有对此进行过多讨论,因此您将不得不玩弄它。这个答案略微谈到了如何使用它:https://stackoverflow.com/a/7596326/1228525

要真正看到这个矩阵的效果,你需要做两件事: 1.将透视矩阵应用于父视图的子层变换2.旋转子视图(你想要透视的那个视图)-否则它将保持平坦,你不能告诉它现在有一个3D透视。

这些数字是任意的,让它们看起来最好:

代码语言:javascript
复制
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

根据这些图片很难判断你想要什么;如果我的答案不是你想要的,多一点解释可能会有所帮助。从我的照片上可以看出,最下面的那个不是透视图...

票数 2
EN

Stack Overflow用户

发布于 2015-07-22 08:58:42

我能够使用AGGeometryKit轻松地实现正确的CATransform3D。

代码语言:javascript
复制
#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 applied
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9946895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档