CALyer 3D变换

文章摘自https://zsisme.gitbooks.io/ios-/content/chapter5/3d-transform.html

CALyer 3D变换_第1张图片
5.7.jpeg

CATransform3DMakeRotation对视图内的图层绕Y轴做了45度角的旋转

  CATransform3D transform = CATransform3DMakeRotation(M_PI_4, 0, 1, 0);
    self.layerView.layer.transform = transform;
CALyer 3D变换_第2张图片
5.8.jpeg

CATransform3D的m34元素,用来做透视
m34的默认值是0,我们可以通过设置m34为-1.0 / d来应用透视效果,d代表了想象中视角相机和屏幕之间的距离,以像素为单位,那应该如何计算这个距离呢?实际上并不需要,大概估算一个就好了。
因为视角相机实际上并不存在,所以可以根据屏幕上的显示效果自由决定它的防止的位置。通常500-1000就已经很好了,但对于特定的图层有时候更小后者更大的值会看起来更舒服,减少距离的值会增强透视效果,所以一个非常微小的值会让它看起来更加失真,然而一个非常大的值会让它基本失去透视效果.

 CATransform3D transform = CATransform3DIdentity;
    //apply perspective
    transform.m34 = - 1.0 / 500.0;
    //rotate by 45 degrees along the Y axis
    transform = CATransform3DRotate(transform, M_PI_4, 0, 1, 0);
    //apply to layer
    self.layerView.layer.transform = transform;
CALyer 3D变换_第3张图片
5.10.jpeg

如果视图内有多个子视图都需要变换,可以指定父视图具有透视效果:

  CATransform3D perspective = CATransform3DIdentity;
    perspective.m34 = - 1.0 / 500.0;
    self.containerView.layer.sublayerTransform = perspective;

你可能感兴趣的:(CALyer 3D变换)