iOS 如何优雅的设置UIView的渐变(swift版)

2021-02-25  本文已影响0人  小生不才_HR

渐变的设置基本代码


 let layerView = UIView() 

 layerView.frame = CGRect(x: 0, y: 0, width: 375, height: 667)

 // fillCode
 let bgLayer1 = CAGradientLayer() 

 bgLayer1.colors = [UIColor(red: 0.27, green: 0.81, blue: 1, alpha: 1).cgColor, UIColor(red: 0, green: 0.93, blue: 0.62, alpha: 1).cgColor]

 bgLayer1.locations = [0, 1]bgLayer1.frame = layerView.bounds 

 bgLayer1.startPoint = CGPoint(x: 1, y: 0) 

 bgLayer1.endPoint = CGPoint(x: 1, y: 1)

 layerView.layer.addSublayer(bgLayer1) 

 view.addSubview(layerView)

遇到的问题

我们常常在view的layoutSubviews中处理渐变,而使用SnapKit进行约束的设置后,获取不到想要渐变的视图的bounds。从而导致渐变设置失败。

推荐解决方法

第一步 -- 封装一个有 CAGradientLayer()的UIView():

class GradientView: UIView {

    let gradientLayer = CAGradientLayer()

    override init(frame:CGRect) {

        super.init(frame: frame)

        layer.addSublayer(gradientLayer)

    }

    required init?(coder:NSCoder) {

        super.init(coder: coder)

        layer.addSublayer(gradientLayer)

    }

    override func layoutSubviews() {

        super.layoutSubviews()

        gradientLayer.frame=self.bounds

    }
}

第二步 -- 如何使用封装的View?

private lazy var textView:GradientView = {

        let view = GradientView()

        view.gradientLayer.colors = [UIColor(red: 1, green: 1, blue: 0.91, alpha: 1).cgColor, UIColor(red: 0.99, green: 0.91, blue: 0.73, alpha: 1).cgColor]

        view.gradientLayer.locations = [0, 1]

        view.gradientLayer.startPoint = CGPoint(x: 0.5, y: 0)

        view.gradientLayer.endPoint = CGPoint(x: 1, y: 1)

        return view

    }()

总结

只需要在懒加载的时候对封装的View的gradientLayer进行设置,即可优雅的完成渐变的处理。

最后

如果该内容对你有用,希望你动动小手点个赞,让更多的人能看到,同时感谢我的导师汪明对我的指导。

上一篇 下一篇

猜你喜欢

热点阅读