Swift Control View,Label渐变颜色(源码) 一直觉得自己写的不是技术而是情怀一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的希望我的这条路能让你们少走弯路希望我能帮你们抹去知识的蒙尘希望我能帮你们理清知识的脉络希望未来技术之巅上有你们也有我。Swift Control View,Label渐变颜色(源码) 下载链接要用frame约束方式文章目录使用参数说明坐标系说明View - 示例代码效果Label - 示例代码效果封装代码GradientLabelGradientViewUIViewAZGradient使用参数说明参数说明colors 颜色数组locations控制颜色过渡的位置startPoint: 渐变起点endPoint: 渐变终点注意颜色数组有3个颜色控制颜色过渡的位置数组对应要有3个参数渐变起点就是颜色于颜色过渡的位置坐标系说明(0,0)───────────(1,0)│ │ │ UIView │ │ │(0,1)───────────(1,1)View - 示例代码letboxUIView(frame: CGRect(x:0, y:0, width:200, height:100))box.az_setGradientBackground(colors:[UIColor.red, UIColor.blue], locations:[0.0,1.0], startPoint: CGPoint(x:0, y:0.5), endPoint: CGPoint(x:1, y:0.5))view.addSubview(box)box.centerview.center效果Label - 示例代码letlabelGradientLabel()label.frameCGRect(x:50, y:100, width:300, height:60)label.text渐变文字效果label.fontUIFont.boldSystemFont(ofSize:30)label.textAlignment.center // 设置渐变通过关联属性 label.az_colors[UIColor.systemPink.cgColor, UIColor.systemPurple.cgColor]label.az_locations[0.0,1.0]label.az_startPointCGPoint(x:0, y:0.5)label.az_endPointCGPoint(x:1, y:0.5)view.addSubview(label)label.centerview.center效果封装代码GradientLabelimportUIKit class GradientLabel: UILabel{override class var layerClass: AnyClass{returnCAGradientLayer.self}}GradientViewimportUIKit class GradientView: UIView{override class var layerClass: AnyClass{returnCAGradientLayer.self}}UIViewAZGradientimportUIKitimportObjectiveC.runtime private var azColorsKey: UInt80private var azLocationsKey: UInt80private var azStartPointKey: UInt80private var azEndPointKey: UInt80extension UIView{// MARK: - Associated Properties var az_colors:[CGColor]?{get{returnobjc_getAssociatedObject(self,azColorsKey)as?[CGColor]}set{objc_setAssociatedObject(self,azColorsKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)ifletlayerself.layer as? CAGradientLayer{layer.colorsnewValue}}}var az_locations:[NSNumber]?{get{returnobjc_getAssociatedObject(self,azLocationsKey)as?[NSNumber]}set{objc_setAssociatedObject(self,azLocationsKey, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)ifletlayerself.layer as? CAGradientLayer{layer.locationsnewValue}}}var az_startPoint: CGPoint{get{return(objc_getAssociatedObject(self,azStartPointKey)as? NSValue)?.cgPointValue ?? .zero}set{objc_setAssociatedObject(self,azStartPointKey, NSValue(cgPoint: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)ifletlayerself.layer as? CAGradientLayer{layer.startPointnewValue}}}var az_endPoint: CGPoint{get{return(objc_getAssociatedObject(self,azEndPointKey)as? NSValue)?.cgPointValue ?? .zero}set{objc_setAssociatedObject(self,azEndPointKey, NSValue(cgPoint: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)ifletlayerself.layer as? CAGradientLayer{layer.endPointnewValue}}}// MARK: - 创建渐变View static func az_gradientView(colors:[UIColor]?, locations:[NSNumber]?, startPoint: CGPoint, endPoint: CGPoint)-UIView{letviewGradientView()view.az_setGradientBackground(colors: colors, locations: locations, startPoint: startPoint, endPoint: endPoint)returnview}// MARK: - 设置渐变 func az_setGradientBackground(colors:[UIColor]?, locations:[NSNumber]?, startPoint: CGPoint, endPoint: CGPoint){guardletcolorscolorselse{return}letgradientCAGradientLayer()gradient.colorscolors.map{$0.cgColor}gradient.locationslocations gradient.startPointstartPoint gradient.endPointendPoint gradient.frameself.bounds gradient.cornerRadiusself.layer.cornerRadius self.layer.insertSublayer(gradient, at:0)}}