我正在尝试使用CATransform3D为视图添加透视图。目前,这是我得到的:
这就是我想要的:
我很难做到这一点。我完全迷失在这里。这是我的代码:
CATransform3D t = CATransform3DIdentity;
t.m11 = 0.8;
t.m21 = 0.1;
t.m31 = -0.1;
t.m41 = 0.1;
[[viewWindow layer] setTransform:t];
答案 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);