为什么我在draw中创建的CAShapeLayer无法成功设置动画?

问题描述 投票:-1回答:1

有几个S.O.关于CA Shape Layers无法成功设置动画的问题,我已经仔细研究了一下,但是我无法弄清楚我的错误是什么(尽管我认为这是对如何使用CA Layers的基本误解。

我正在尝试在屏幕上绘制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])
        }
    }

然后,当布局更改时,我只需为layoutSubviews中的每一层修改cgPath。

[尝试制作动画时,我在自定义UIView上调用此方法:

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

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

任何人都可以指出我可能出了什么问题吗?

swift xcode core-animation uiviewanimation cashapelayer
1个回答
0
投票

回答-不幸的是,问题在于newFill.fromColor需要Any吗?对象,而我正在将它传递给UIColor对象,而它需要cgColor对象。

© www.soinside.com 2019 - 2024. All rights reserved.