使用UIView.animateKeyframes设置CAShapeLayer属性的动画

时间:2018-08-15 02:50:31

标签: ios swift core-animation

我正在努力理解为什么以下关键帧动画无法达到我的预期。这里的minutesClock是UIView的子类,它也是主视图的子视图。通过暴露约束来设置minuteClock的水平位置。 minutesClock自己的图层有一个名为borderLayer的CAShapeLayer子图层。

我正在尝试同时设置分钟时钟的位置和该孙子borderLayer的填充颜色的动画。我发现关键帧可以用于定位,但是CAShapeLayer可以忽略。也就是说,虽然分钟钟在整个持续时间的一半移至100,但我看不到borderLayer的填充颜色变为红色。取而代之的是,它看起来动画非常快(例如四分之一秒)变成绿色。

       UIView.animateKeyframes(withDuration: 2.0,
                                delay: 0,
                                options: .calculationModeLinear,
                                animations: {
                                    UIView.addKeyframe(withRelativeStartTime: 0.0,
                                                       relativeDuration: 0.5,
                                                       animations: {
                                                        self.minuteClockPositionConstraint.constant = 100
                                                        self.minuteClock.borderLayer.fillColor = UIColor.red.cgColor
                                                        self.view.layoutIfNeeded()
                                    })
                                    UIView.addKeyframe(withRelativeStartTime: 0.5,
                                                       relativeDuration: 0.5,
                                                       animations: {
                                                        self.minuteClockPositionConstraint.constant = 50
                                                        self.minuteClock.borderLayer.fillColor = UIColor.green.cgColor
                                                        self.view.layoutIfNeeded()
                                    })

        }, completion: nil)

我想我可能正在解决这个错误,将视图级的关键帧动画与通过更改CAShapeLayer的属性触发的隐式动画混合在一起。

关于我应该如何做的任何建议?

0 个答案:

没有答案