54 lines
1.2 KiB
Swift
54 lines
1.2 KiB
Swift
//
|
|
// SPGradientLabel.swift
|
|
// MoviaBox
|
|
//
|
|
// Created by 佳尔 on 2025/4/27.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class SPGradientLabel: UILabel {
|
|
|
|
|
|
|
|
private(set) var gradientLayer: CAGradientLayer = {
|
|
// 创建渐变层
|
|
let gradient = CAGradientLayer()
|
|
gradient.colors = [
|
|
UIColor.red.cgColor,
|
|
UIColor.blue.cgColor
|
|
]
|
|
gradient.startPoint = CGPoint(x: 0.5, y: 0)
|
|
gradient.endPoint = CGPoint(x: 0.5, y: 1)
|
|
gradient.locations = [0, 1]
|
|
return gradient
|
|
}()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
layer.addSublayer(gradientLayer)
|
|
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
|
|
gradientLayer.frame = bounds
|
|
|
|
// 创建一个文字图层
|
|
let textLayer = CATextLayer()
|
|
textLayer.string = attributedText ?? NSAttributedString(string: text ?? "")
|
|
textLayer.frame = bounds
|
|
textLayer.alignmentMode = .center
|
|
textLayer.contentsScale = UIScreen.main.scale
|
|
|
|
gradientLayer.mask = textLayer
|
|
|
|
}
|
|
|
|
}
|