Swift 为什么我在draw中创建的CAShapeLayer没有成功设置动画?

Swift 为什么我在draw中创建的CAShapeLayer没有成功设置动画?,swift,xcode,core-animation,uiviewanimation,cashapelayer,Swift,Xcode,Core Animation,Uiviewanimation,Cashapelayer,关于CA形状层动画制作不成功,有几个S.O.的问题,我已经看过了,但我不知道我的错误是什么(尽管我认为这是对如何使用CA层的基本误解) 我试图在屏幕上画3个圆圈,并在调用方法时填充它们 在自定义UIView中,在我的设置中,我有以下代码: class ProgressBar: UIView { private var bubbles: [CAShapeLayer] = [CAShapeLayer(), CAShapeLayer(), CAShapeLayer()]

关于CA形状层动画制作不成功,有几个S.O.的问题,我已经看过了,但我不知道我的错误是什么(尽管我认为这是对如何使用CA层的基本误解)

我试图在屏幕上画3个圆圈,并在调用方法时填充它们

在自定义UIView中,在我的设置中,我有以下代码:

class ProgressBar: UIView {
        private var bubbles: [CAShapeLayer] = [CAShapeLayer(), CAShapeLayer(), CAShapeLayer()]
        private var positions: [CGFloat] = [0.25, 0.50, 0.75]

        private var mainRect = CAShapeLayer()
        private var progRect = CAShapeLayer()

func setup() {
        self.isOpaque = false
        self.backgroundColor = UIColor.clear

        // initialize the main rectangle
        mainRect.fillColor = secondary.cgColor
        mainRect.strokeColor = primary.cgColor
        self.layer.addSublayer(mainRect)

        // initialize the "progress" part
        progRect.fillColor = primary.cgColor
        progRect.strokeColor = secondary.cgColor
        self.layer.addSublayer(progRect)

        // initialize the bubbles
        for i in 0...2 {
            bubbles[i].fillColor = (CGFloat(progress) < positions[i]) ? secondary.cgColor : primary.cgColor
            bubbles[i].strokeColor = (CGFloat(progress) < positions[i]) ? primary.cgColor : secondary.cgColor
            self.layer.addSublayer(bubbles[i])
        }
    }

有人能告诉我出了什么问题吗?

回答-不幸的是,问题是newFill.fromColor接受了一个Any?对象,我给它传递了一个UIColor对象,而它需要一个cgColor对象

func fillCircle() {
        let newFill: CABasicAnimation = CABasicAnimation(keyPath: "fillColor")
        newFill.fromValue = secondary
        newFill.toValue = primary
        newFill.duration = 2

        bubbles[0].add(newFill, forKey: "fillColor")
    }