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进行设置,即可优雅的完成渐变的处理。
最后
如果该内容对你有用,希望你动动小手点个赞,让更多的人能看到,同时感谢我的导师汪明对我的指导。