2016-09-17 4 views
0

У меня есть CAShapeLayer, чья strokeEnd я периодически обновляю внутри цикла NSTimer. Отлично работает, когда я звоню:Анимация CAShapeLayer: Do On Completion

myPathLayer.strokeEnd += 0.1 

Это изменение пути автоматически оживляет, как я хочу. Мой вопрос в том, что это не вызов функции, не существует блока завершения. Я хочу выполнить другое действие после завершения этой анимации. Как я могу это достичь?

ответ

1

Вы можете обернуть с помощью CATransaction, чтобы установить блок завершения анимации слоев.

CATransaction.begin() 
CATransaction.setCompletionBlock({self.myFunction()}) 
myPathLayer.strokeEnd += 0.1 
CATransaction.commit() 

Надеюсь, что есть лучший способ, но я так и сделал.

+0

Это совершенно отлично подходит в моем случае. Благодарю. – Connor

0

Вы можете использовать метод делегирования CAAnimation.

class Whatever: CAAnimationDelegate { ... 

затем

let animation = CABasicAnimation(keyPath: <your_key_path>) 
... 
animation.delegate = self 

и использовать метод делегата:

func animationDidStop(_ anim: CAAnimation, finished flag: Bool) { 

    if flag { <do_what_you_need_to> } 
}