CAGradientLayer на UILabel не может быть повернут

Мне нужен горизонтальный градиент цвета в качестве цвета текста моего 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!)
}
}

person heyfrank    schedule 01.05.2017    source источник


Ответы (1)


вы можете использовать

    gradientLayer.startPoint = CGPoint.init(x: 0, y: 0)
    gradientLayer.endPoint = CGPoint.init(x: 1, y: 1)

для диагонального градиента. вы можете играть с этими точками, но хотите добиться других результатов.

person user1974368    schedule 01.05.2017
comment
Работает как шарм, спасибо вам большое! Это также должно быть намёком в официальной документации! - person heyfrank; 01.05.2017
comment
рад что помог :) - person user1974368; 01.05.2017