StrokeEnd CAShapeLayer не анимируется

Это код, который я использую для анимации моего CAShapeLayer:

_progressBarLayer.strokeEnd = CGFloat(_progressToDrawForProgress(progress))

let progressAnimation = CABasicAnimation(keyPath: "strokeEnd")
progressAnimation.duration = CFTimeInterval(1.0)
progressAnimation.fromValue = CGFloat(self.progress)
progressAnimation.toValue = _progressBarLayer.strokeEnd
progressAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)

_progressBarLayer.addAnimation(progressAnimation, forKey: "progressAnimation")

Я протестировал использование делегата, чтобы увидеть, воспроизводится ли анимация, и она воспроизводится. Ведение журнала начинается и останавливается в нужном месте.

Этот код находится в функции setProgress(progress: CGFloat, animated: Bool) и выполняется, если анимация имеет значение true.

Есть ли здесь что-то явное?


person Adam Carter    schedule 15.03.2015    source источник
comment
К вашему сведению, _progressBarLayer — ленивое CAShapeLayer свойство   -  person Adam Carter    schedule 15.03.2015
comment
Что происходит? Ничего или сразу переходит к конечному значению? Какие значения имеют CGFloat(self.progress) и _progressBarLayer.strokeEnd при тестировании?   -  person rdelmar    schedule 15.03.2015


Ответы (1)


Длинный ответ: оказалось, что анимация не воспроизводилась из-за того, что что-то было нарисовано над CAShapeLayer с помощью кварца, поэтому то, что я думал, что CAShapeLayer (который должен быть анимирован), на самом деле было кварцевым рисунком того же слоя.

Краткий ответ: не используйте Quartz в графическом контексте.

person Adam Carter    schedule 17.03.2015
comment
Как вы делали анимацию? Вы использовали что-то еще, кроме CABasicAnimation? - person T. Hyldgaard; 20.03.2018