Анимация цвета текста расширения UIView - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть расширение UILabel методом встряхивания. Этот метод встряхивает метку в течение 2 секунд. Отлично работает.

Я пытаюсь связать 2-секундное изменение красного -> белого цвета текста с текстом метки. Это не отлично работает.

Вот мой прогресс.

extension UILabel {
    func shake() {

        let animation = CAKeyframeAnimation(keyPath: "transform.translation.x")
        animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
        animation.duration = 2
        animation.values = [
            0.0, 0.0,
            -4.0, 4.0,
            -7.0, 7.0,
            -10.0, 10.0,
            -7.0, 7.0,
            -4.0, 4.0,
            0.0, 0.0,
        ]
        animation.repeatCount = 1
        layer.add(animation, forKey: nil)

        let colorsAnimation = CABasicAnimation(keyPath: "foregroundColor")
        colorsAnimation.fromValue = UIColor.red.cgColor
        colorsAnimation.toValue = UIColor.white.cgColor
        colorsAnimation.duration = 2

        layer.add(colorsAnimation, forKey: nil)

    }
}

Проблема:

ColoursAnimation CABasicAnimation не влияет на цвет текста. Цвет текста не делает 2-секундный переход от красного к белому.

Как связать анимацию встряхивания и анимацию цветов вместе на этикетке?

1 Ответ

0 голосов
/ 09 сентября 2018

CALayers не имеет свойства foregroundColor. У них есть свойство backgroundColor. Вы могли бы оживить это. (Просто измените строку let colorsAnimation = CABasicAnimation(keyPath: "foregroundColor") на let colorsAnimation = CABasicAnimation(keyPath: "backgroundColor")

Почему вы используете CAAnimation, а не UIView анимацию? CAAnimation может делать то, что не может UIView анимация, но это лот сложнее в использовании и не так хорошо документировано.

(Например, есть анимация ключевого кадра UIView.)

...