javascript:void(0)
众所周知,下面一行代码可以在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的效果相差无几。