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)
}
效果:
然而,在给自定义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