2017-02-21 14 views
2

Я пытаюсь анимировать изменение path имущества CAShapeLayer, как это:Animate CAShapeLayer изменить путь

animatePathChange(for: progressLayer, toPath: progressPath.cgPath) 
progressLayer.path = progressPath.cgPath 

И это animatePathChange код функции:

func animatePathChange(for layer: CAShapeLayer, toPath: CGPath) { 
    let animation = CABasicAnimation(keyPath: "path") 
    animation.duration = 1.0 
    animation.fromValue = layer.path 
    animation.toValue = toPath 
    animation.timingFunction = CAMediaTimingFunction(name: "easeInEaseOut") 
    layer.add(animation, forKey: "path") 
} 

Но конечный результат не то, что я хочу. Как я могу добиться анимации, которая изменяет 1 слоя от старого значения к новому?

Вот как это выглядит прямо сейчас с указанным кодом:

Result

+0

Вы можете анимировать 'strokeEnd' слоя вместо изменения пути? – dan

+0

Это будет анимировать дорожки с начала. Я хочу оживить только разницу между старым и новым путем по пути. –

ответ

7

Не анимировать путь. Настройте весь путь, а затем установите strokeEnd - допустим, это 0, поэтому пользователь ничего не видит. Теперь каждый раз, когда вы хотите внести изменения, анимируйте изменение с текущего strokeEnd на новый strokeEnd. Путь, по-видимому, будет расширяться дальше по кривой.

enter image description here

+0

Почему я об этом не думал .. Спасибо, много! –

 Смежные вопросы

  • Нет связанных вопросов^_^