iOS学习开发iOS猿媛圈Swift Developer

Swift-CATransformLayer

2018-05-07  本文已影响13人  FlyElephant

CATransformLayer用来创建真是的3D层次视图,而不是像其他的CALayer通过扁平的层次结果去渲染视图模型.

不同于普通的CALayer中子图层的z轴是0, CATransformLayer的子图层Z轴不为0,因此有很大普通CALayer的特性CATransformLayer并不支持.

CATransformLayer与CALayer对比.png

效果图中的第一个图是通过CATransformLayer添加子视图的结果,第二个是CALayer添加自视图的结果,背景的Layer都设置了m34(景深)设置.

CATransformLayer代码:

        let layer = CATransformLayer()
        layer.addSublayer(layerOfColor(.red, zPosition: 20))
        layer.addSublayer(layerOfColor(.green, zPosition: 40))
        layer.addSublayer(layerOfColor(.orange, zPosition: 60))
        
        var perspective = CATransform3DIdentity
        perspective.m34 = -1 / 100
        layer.transform = CATransform3DRotate(perspective, 0.1, 0, 1, 0)
        layer.backgroundColor = UIColor.gray.cgColor
        self.view.layer.addSublayer(layer)

CALayer代码:

        let layer = CALayer()
        layer.addSublayer(layerOfColor(.red, zPosition: 20))
        layer.addSublayer(layerOfColor(.green, zPosition: 40))
        layer.addSublayer(layerOfColor(.orange, zPosition: 60))
        
        var perspective = CATransform3DIdentity
        perspective.m34 = -1 / 100
        layer.transform = CATransform3DRotate(perspective, 0.1, 0, 1, 0)
        layer.backgroundColor = UIColor.gray.cgColor
        layer.frame = CGRect(x: 0, y: 300, width: 300, height: 300)
        self.view.layer.addSublayer(layer)
    func layerOfColor(_ color: UIColor, zPosition: CGFloat) -> CALayer {
        let layer = CALayer()
        layer.frame = CGRect(x: 50, y: 50, width: 100, height: 100)
        layer.backgroundColor = color.cgColor
        layer.zPosition = zPosition
        layer.opacity = 0.5
        
        return layer
    }

参考资料:
https://developer.apple.com/documentation/quartzcore/catransformlayer

上一篇下一篇

猜你喜欢

热点阅读