Swift 渐进色背景设置

2022-07-26,,,

记录一次给UILabel添加渐进背景的过程:

思路:UILabel继承自UIView,而项目中也有不少UIView和其子类也要设置渐进色,所以通过给UIView添加一个延展方法,子类调用延展方法即可。

具体方法:

//方向枚举,这里只列出两个
enum GradientDirection {
    case Horizontal ///水平
    case Vertial ///垂直
}

//MARK:渐进色
extension UIView {
    
    func addGradientColor(colors:[UIColor],locations:[NSNumber],direction:GradientDirection = .Horizontal,targetView:UIView) {
        //UIColor处理为CGColor
        let exColor = colors.compactMap{ $0.cgColor }
        
        let point_H = CGPoint(x: 1.0, y: 0)
        let point_V = CGPoint(x: 0, y: 1.0)
        
        let gradientLayer = CAGradientLayer.init()
        //控制渐进色方向,
        //start:(0,0) end:(1.0,0) 水平方向
        //start:(0,0) end:(0,1.0) 垂直方向,还有左上左下右上右下方向可设置   
        gradientLayer.startPoint = CGPoint(x: 0, y: 0)
        //判断方向
        gradientLayer.endPoint = (direction == .Horizontal) ? point_H : point_V
        
        gradientLayer.colors = exColor
        gradientLayer.locations = locations
        //layer的位置
        gradientLayer.frame = targetView.frame
        self.layer.insertSublayer(gradientLayer, at: 0)
    }
    
}

需要注意的是:

1,此方法由需要添加渐进色控件的父视图来调用,子控件由参数入口传入;

2,子控件不能设置BackgroundColor,否则没有效果

例如:

//在控制器中
override func viewDidLoad() {
        super.viewDidLoad()
        kTitle = "首页"

        let label = UILabel(frame: CGRect(x: 50, y: 100, width: 200, height: 100))
        label.text = "颜色渐变"
        label.textColor = UIColor.black
        label.font = UIFont.systemFont(ofSize: 20.0)
        label.textAlignment = .center
        view.addSubview(label)
        //添加到父视图上,封装的方法传入要设置颜色的目标控件,便于找到layer的位置
        self.view.addGradientColor(colors: [UIColor.red,UIColor.green], locations: [0,1], targetView: label)
    }

效果:

然而,在给自定义UIView中的子控件添加背景色时,此方法需要写在 draw(_ rect: CGRect) 方法中, 下面为Xib中的代码:

    @IBOutlet weak var bottomView: UIView!
    
    @IBOutlet weak var timeLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
    }
    
    override func draw(_ rect: CGRect) {
        super.draw(rect)
        bottomView.addGradientColor(colors: [UIColor.yl_colorWithHex(0xF5CF68),UIColor.yl_colorWithHex(0xFFB152)], locations: [0,1], targetView: timeLabel)
    }

如果你有更好的设置背景色的方法,可以交流一下。

本文地址:https://blog.csdn.net/qq_30932479/article/details/110632701

《Swift 渐进色背景设置.doc》

下载本文的Word格式文档,以方便收藏与打印。