动画化UIView扩展的文本颜色

时间:2018-09-08 20:42:32

标签: swift animation cabasicanimation cakeyframeanimation

我有一个带有摇动方法的UILabel扩展。此方法将标签摇晃2秒钟。效果很好。

我正在尝试将2秒红色->白色text-color更改链接到标签文本。 效果不佳

这是我的进步。

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链接在一起?

1 个答案:

答案 0 :(得分:0)

CALayers没有foregroundColor属性。它们确实具有backgroundColor属性。您可以制作动画。 (只需将行let colorsAnimation = CABasicAnimation(keyPath: "foregroundColor")更改为let colorsAnimation = CABasicAnimation(keyPath: "backgroundColor")

您为什么要使用CAAnimation而不是UIView动画? CAAnimation可以完成UIView动画无法完成的工作,但这是很多,更难以使用,而且记录也不够完善。

(例如,有一个关键帧UIView动画。)