欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Swift 渐进色背景设置

程序员文章站 2022-03-28 16:26:43
记录一次给UILabel添加渐进色背景的过程:思路:UILabel继承自UIView,而项目中也有不少UIView和其子类也要设置渐进色,所以通过给UIView添加一个延展方法,子类调用延展方法即可。具体方法://方向枚举,这里只列出两个enum GradientDirection { case Horizontal ///水平 case Vertial ///垂直}//MARK:渐进色extension UIView { func addGradi...

记录一次给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)
    }

效果:

Swift  渐进色背景设置

然而,在给自定义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