| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // MOGradientLabel.swift
- // MiMoLive
- //
- // Created by OneeChan on 2025/9/25.
- //
- import Foundation
- import UIKit
- class MOGradientLabel: UILabel {
- private let gradientLayer = CAGradientLayer()
- var gradientColors: [UIColor] = [.red, .blue]
- var startPoint: CGPoint = .init(x: 0, y: 0.5)
- var endPoint: CGPoint = .init(x: 1, y: 0.5)
-
- }
- extension MOGradientLabel {
- override func layoutSubviews() {
- super.layoutSubviews()
-
- applyGradient()
- }
-
- private func applyGradient() {
- gradientLayer.colors = gradientColors.map { $0.cgColor }
- gradientLayer.startPoint = startPoint
- gradientLayer.endPoint = endPoint
- gradientLayer.frame = bounds
-
- // 创建文字遮罩
- let textMask = CALayer()
- textMask.contents = UIGraphicsImageRenderer(size: bounds.size).image { _ in
- text?.draw(in: bounds, withAttributes: [
- .font: font ?? UIFont.systemFont(ofSize: 17),
- .foregroundColor: textColor ?? .white
- ])
- }.cgImage
- textMask.frame = bounds
-
- // 将文字遮罩应用到渐变层
- gradientLayer.mask = textMask
- if gradientLayer.superlayer == nil {
- layer.insertSublayer(gradientLayer, at: 0)
- }
- }
- }
- //import SwiftUI
- //
- //struct MOGradientLabelPreview: UIViewRepresentable {
- // func makeUIView(context: Context) -> some UIView {
- // let view = UIView()
- // let testView = MOGradientLabel()
- // testView.text = "This is a test"
- // view.addSubview(testView)
- // testView.snp.makeConstraints { make in
- // make.leading.centerY.equalToSuperview()
- // }
- // return view
- // }
- //
- // func updateUIView(_ uiView: UIViewType, context: Context) {
- //
- // }
- //}
- //
- //#Preview {
- // MOGradientLabelPreview()
- //}
|