У меня есть расширение 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)
}
}
Эта проблема:
ColorsAnimation CABasicAnimation не влияет на цвет текста. Цвет текста не переходит с красного на белый за 2 секунды.
Как я могу связать анимацию встряхивания и colorsAnimation вместе на этикетке?
CALayers
не имеет свойства foregroundColor
. У них есть свойство backgroundColor
. Вы можете это оживить. (Просто измените строку let colorsAnimation = CABasicAnimation(keyPath: "foregroundColor")
на let colorsAnimation = CABasicAnimation(keyPath: "backgroundColor")
Почему вы используете CAAnimation
, а не анимацию UIView
? CAAnimation
может делать то, что анимация UIView
не может, но это много сложнее использовать и не так хорошо документировано.
(Например, есть анимация UIView по ключевым кадрам.)