javascript:void(0)

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

 

[plain] view plaincopy
 
  1. CATransform3DRotate(origin, DegreesToRadians(180), 0.0f, 1.0f, 0.0f);  

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

 

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

 

[plain] view plaincopy
 
  1. CGFloat zDistance = -1.0 / 1500;  
  2. origin.m34 = zDistance;  
  3. CATransform3DRotate(origin, DegreesToRadians(180), 0.0f, 1.0f, 0.0f);  

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

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

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

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