CATransform3D转换

时间:2012-03-30 16:28:42

标签: iphone ios uiview core-animation transform

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

enter image description here

这就是我想要的:

enter image description here

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

CATransform3D t = CATransform3DIdentity;
    t.m11 = 0.8;
    t.m21 = 0.1; 
    t.m31 = -0.1; 
    t.m41 = 0.1;
    [[viewWindow layer] setTransform:t];

2 个答案:

答案 0 :(得分:2)

Matrix元素.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 < / p>

根据这些照片,很难说出你想要的东西;如果我的答案不是你想要的,那么更多的解释可能会有所帮助。从图片中可以看出,最底层的不是透视......

答案 1 :(得分:0)

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

    function init()
    var memory;
    {
        document.getElementById('n0').addEventListner("click", number0);

    }

function number0()
    {
        document.getElementById('display').value += 0;
        memory += 0;
        return 0;
    }

window.addEventListner("load", init, false);