美文网首页
CAGradientLayer + CAShapeLayer 实

CAGradientLayer + CAShapeLayer 实

作者: 风吹柳絮如花落 | 来源:发表于2021-08-23 12:37 被阅读0次
    class LoadingView: UIView {
        
        // 主layer
        var shapeLayer:CAShapeLayer!
        // 圆形layer
        var layer1:CAShapeLayer!
    
        override func awakeFromNib() {
            super.awakeFromNib()
            setUI()
        }
        
        override init(frame: CGRect) {
            super.init(frame: frame)
            setUI()
        }
        
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        override func layoutSubviews() {
            super.layoutSubviews()
            shapeLayer.frame = self.bounds
            // 创建梯形layer
            let leftLayer = CAGradientLayer()
            leftLayer.frame  = CGRect.init(x: 0, y: 0, width: self.frame.size.width / 2, height: self.frame.size.width)// CGRectMake(0, 0, 240, 120)
            leftLayer.colors = [UIColor.init(white: 1, alpha: 0.5).cgColor, UIColor.init(white: 1, alpha: 1).cgColor]
            leftLayer.startPoint = CGPoint.init(x: 0, y: 0)// CGPointMake(0, 0.5)
            leftLayer.endPoint   = CGPoint.init(x: 0, y: 1)//CGPointMake(1, 0.5)
            shapeLayer.addSublayer(leftLayer)
            
            let rightLayer = CAGradientLayer()
            rightLayer.frame  = CGRect.init(x: self.frame.size.width / 2, y: 0, width: self.frame.size.width / 2, height: self.frame.size.width)// CGRectMake(0, 120, 240, 120)
            rightLayer.colors = [UIColor.init(white: 1, alpha: 0.6).cgColor, UIColor.init(white: 1, alpha: 0).cgColor]
            rightLayer.startPoint = CGPoint.init(x: 0, y: 0)// CGPointMake(0, 0.5)
            rightLayer.endPoint   = CGPoint.init(x: 0, y: 1)// CGPointMake(1, 0.5)
            shapeLayer.addSublayer(rightLayer)
            
            // 创建一个圆形layer
            layer1 = CAShapeLayer()
            layer1.frame = self.bounds
            layer1.path = UIBezierPath(arcCenter: CGPoint.init(x: self.frame.size.width / 2, y: self.frame.size.width / 2), radius: self.frame.size.width / 2 - 2, startAngle: 0, endAngle: 2 * CGFloat(Double.pi), clockwise: true).cgPath
            layer1.lineWidth    = 2
    
            layer1.lineJoin     = CAShapeLayerLineJoin.round
            layer1.strokeColor  = UIColor.black.cgColor
            layer1.fillColor    = UIColor.clear.cgColor
            layer1.strokeEnd    = 1
            
            // 根据laery1 的layer形状在 shaperLayer 中截取出来一个layer
            shapeLayer.mask = layer1
        }
        
        func setUI() {
            shapeLayer = CAShapeLayer()
            self.layer.addSublayer(shapeLayer)
        }
        
        var isAnimated: Bool = false
        
        /**
         旋转动画
         */
        func startLoading() {
            
            if isAnimated {
                return
            }
            
            isAnimated = true
            
            let animation = CABasicAnimation(keyPath: "transform.rotation.z")
            animation.isRemovedOnCompletion = false
            animation.fromValue = 2 * Double.pi
            animation.toValue   =  0
            animation.duration = 1.25
            animation.repeatCount = HUGE
            self.layer.add(animation, forKey: "")
        }
        func endLoading() {
            isAnimated = false
            self.layer.removeAllAnimations()
        }
        
    }
    
    

    相关文章

      网友评论

          本文标题:CAGradientLayer + CAShapeLayer 实

          本文链接:https://www.haomeiwen.com/subject/edzkiltx.html