Мне нужен горизонтальный градиент цвета в качестве цвета текста моего UILabel
. Поэтому я использую CAGradientLayer
, как описано в https://developer.apple.com/reference/quartzcore/cagradientlayer. Градиент отлично отображается на тексте, но вертикально.
CATransform3DMakeRotation
, как описано Apple, не вращает градиент.
В этом ответе говорится, что CAGradientLayer
необходимо сначала добавить к представлению или другому слою, чтобы вращение работало.
Поэтому я попытался добавить его в качестве подслоя в свой UILabel и удалить его после рендеринга, но он не преобразует градиент в тексте, а добавляет поверх него прямоугольник горизонтального градиента размером с UILabel, но с поворотом. 90 °.
Вот мой код:
extension UILabel {
func addGradient() {
// Get size of the label
let size = CGSize(width: frame.width, height: frame.width)
let gradientLayer = CAGradientLayer()
gradientLayer.frame = CGRect(x: 0, y: 0, width: size.height, height: size.width)
gradientLayer.colors = [
UIColor.gradientBlue.cgColor,
UIColor.gradientPink.cgColor,
UIColor.gradientOrange.cgColor
]
// layer.addSublayer(gradientLayer)
gradientLayer.transform = CGAffineTransform
// This does not work
gradientLayer.transform = CATransform3DMakeRotation(CGFloat.pi / 2, 0, 0, 1)
UIGraphicsBeginImageContext(size)
gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
// Create UIImage from Gradient
let gradientImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
// gradientLayer.removeFromSuperlayer()
textColor = UIColor.init(patternImage: gradientImage!)
}
}