在開發(fā)當中產品有時候要求文字背景有漸變效果蜡歹,當然這個需求很簡單刺洒,也有很多種實現(xiàn)方法杨幼,通常我們想到的做法就是通過
label.layer.addSublayer
添加CAGradientLayer
的實例去實現(xiàn)。但是你會發(fā)現(xiàn)漸變的效果是有了惋砂,文字卻沒有了屑宠。
因為圖層也存在層級關系厢洞,所以我猜想是被漸變圖層遮擋了,通過 insertSublayer
和設置 CAGradientLayer
實例的 zPosition
屬性都不能解決這個問題典奉。
既然改變層級解決不了躺翻,那我索性就把 UILabel
的圖層直接替換為 CAGradientLayer
:
open class var layerClass: AnyClass { get }
自定義一個GradientLabel繼承于UILabel,重寫類屬性 layerClass
:
import UIKit
class GradientLabel: UILabel {
override class var layerClass: AnyClass {
return CAGradientLayer.self
}
override init(frame: CGRect) {
super.init(frame: frame)
if let gradLayer = layer as? CAGradientLayer {
gradLayer.colors = [UIColor.red.cgColor, UIColor.cyan.cgColor]
gradLayer.endPoint = CGPoint(x: 1.0, y: 0.0)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
使用和UILabel沒什么區(qū)別:
let label = GradientLabel(frame: CGRect(x: 20, y: 100, width: view.bounds.width - 30, height: 50))
label.text = "這是UILabel上的文字"
label.textAlignment = .center
label.textColor = UIColor.white
view.addSubview(label)
看一下效果:
漸變背景的label
完美N谰痢9恪!