Swift 设置UIView扩展的文本颜色的动画

Swift 设置UIView扩展的文本颜色的动画,swift,animation,cabasicanimation,cakeyframeanimation,Swift,Animation,Cabasicanimation,Cakeyframeanimation,我有一个UILabel的扩展,使用了一个shake方法。此方法摇动标签2秒钟。它工作得很好 我试图将2秒钟的红色->白色文本颜色更改链接到标签文本。它不太管用 这是我的进步 extension UILabel { func shake() { let animation = CAKeyframeAnimation(keyPath: "transform.translation.x") animation.timingFunction = CAMediaT

我有一个UILabel的扩展,使用了一个shake方法。此方法摇动标签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)

    }
}
问题:

颜色SANIMATION CABasicAnimation对文本颜色没有影响。文本颜色不会在2秒钟内从红色过渡到白色


如何将抖动动画和色彩动画链接到标签上?

CALayers
没有
foregroundColor
属性。它们确实有一个
backgroundColor
属性。你可以把它制作成动画。(只需将行
let colorsAnimation=CABasicAnimation(键路径:“foregroundColor”)
更改为
let colorsAnimation=CABasicAnimation(键路径:“backgroundColor”)

为什么要使用
CAAnimation
而不是
UIView
动画?
CAAnimation
可以做
UIView
动画做不到的事情,但它是一个很难使用且没有很好的文档记录的东西

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