QuartzCore CATransform3D 设置透视效果


众所周知,下面一行代码可以在origin基础上使对应layer绕Y轴旋转180度。

CATransform3DRotate(origin, DegreesToRadians(180), 0.0f, 1.0f, 0.0f);
如果将这个变换加入动画中可以看到,其旋转过程是一个平面效果,并没有象系统提供的flip效果那样有透视效果。

但现在只需要一个简单的改动即可实现此效果,在origin上修改其m34变量,如下所示:

CGFloat zDistance = -1.0 / 1500;
origin.m34 = zDistance;
CATransform3DRotate(origin, DegreesToRadians(180), 0.0f, 1.0f, 0.0f);

其中,zDistance代表透视点离当前平面的距离,取值由-1~1各个,其中:

-1 表示透视点在负无穷,1 表示透视点在正无穷,0 表示透视点在当前平面。

通常情况下会取zDistance的值为负,负貌似表示透视点在当前平面的后面。

而且zDistance的取值不是线性分布的,取1及0.1的效果相差无几。

你可能感兴趣的:(iOS,CoreAnimation,CATransform3D,m34,perspective,透视,立体)