class GradientLabel : UIView{
func setupText(text:String){
self.textLayer.string = text
self.maskTextLayer.string = text
}
func setupAttText(text:NSAttributedString){
self.textLayer.string = text
self.maskTextLayer.string = text
}
init(isSelected: Bool,fontSize : CGFloat,text: String,gradientLayer:CAGradientLayer,alignment : CATextLayerAlignmentMode = .left) {
self.isSelected = isSelected
self.textLayer = CATextLayer()
self.textLayer.string = text
self.textLayer.fontSize = fontSize
self.textLayer.backgroundColor = UIColor.clear.cgColor
self.textLayer.foregroundColor = UiuTheme.primaryText.cgColor
self.textLayer.alignmentMode = .left
self.textLayer.contentsScale = 2.0
self.textLayer.isWrapped = **true**
self.textLayer.alignmentMode = alignment
self.gradientLayer = gradientLayer
self.maskTextLayer = CATextLayer()
self.maskTextLayer.string = text
self.maskTextLayer.fontSize = fontSize
self.maskTextLayer.backgroundColor = UIColor.clear.cgColor
self.maskTextLayer.foregroundColor = UiuTheme.primaryText.cgColor
self.maskTextLayer.alignmentMode = .left
self.maskTextLayer.contentsScale = 2.0
self.maskTextLayer.isWrapped = true
self.maskTextLayer.alignmentMode = alignment
self.gradientLayer.mask = self.maskTextLayer
super.init(frame: .zero)
self.backgroundColor = .clear
self.layer.addSublayer(**self**.gradientLayer)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var textLayer : CATextLayer
var maskTextLayer : CATextLayer
var gradientLayer : CAGradientLayer
var isSelected: Bool {
didSet {
if !isSelected{
self.gradientLayer.removeFromSuperlayer()
self.layer.addSublayer(**self**.textLayer)
}else{
self.textLayer.removeFromSuperlayer()
self.layer.addSublayer(**self**.gradientLayer)
}
}
}
override func layoutSubviews() {
super.layoutSubviews()
self.textLayer.frame = self.bounds
self.maskTextLayer.frame = self.bounds
self.gradientLayer.shouldRasterize = true
self.gradientLayer.frame = textLayer.bounds
}
}
使用代码如下
let gradientLayer = CAGradientLayer()
layer.colors = [
UIColor(hexString: "#C400FF")!.cgColor,
UIColor(hexString: "#4372FA")!.cgColor
]
layer.startPoint = CGPoint(x: 0, y: 0.0)
layer.endPoint = CGPoint(x: 1.0, y: 1.0)
let gradientLabel = GradientLabel(isSelected: true, fontSize: 15, text: "渐变色label", gradientLayer:gradientLayer)
可以通过gradientLabel.isSelected = false来设置不展示渐变色,gradientLabel.isSelected = true来展示渐变色, 支持通过setupAttText方法来设置NSAttributedString