iOS detiene animateWithDuration antes de la finalización

Tengo una CollectionView y quiero crear una animation dentro de CollectionViewCell seleccionada por el usuario. Elegí usar animateKeyframesWithDuration porque quiero crear una animation personalizada paso a paso. Mi código se ve así:

func animate() { UIView.animateKeyframesWithDuration(1.0, delay: 0.0, options: .AllowUserInteraction, animations: { () -> Void in UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: { () -> Void in // First step }) UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: { () -> Void in // Second step }) }) { (finished: Bool) -> Void in if self.shouldStopAnimating { self.loadingView.layer.removeAllAnimations() } else { self.animate() } } } 

Esto se ejecuta dentro de CollectionViewCell personalizado cuando está seleccionado. El problema es que quiero forzar la detención de la animation de inmediato en un cierto punto. Pero cuando hago eso, la animation no se detiene por completo, simplemente mueve la animation restante en una celda diferente (¿probablemente la última celda reutilizada?)

No puedo entender por qué esto está sucediendo. He intentado diferentes enfoques pero ninguno de ellos detiene la animation antes de ingresar normalmente en el bloque de finalización

¿Alguien tiene alguna idea de esto?

En lugar de eliminar las animaciones de la capa, podría intentar agregar otra animation con una duración muy corta que establezca las properties de vista que desea dejar de animar.

Algo como esto:

 if self.shouldStopAnimating { UIView.animateWithDuration(0.01, delay: 0.0, options: UIViewAnimationOptions.BeginFromCurrentState, animations: { () -> Void in //set any relevant properties on self.loadingView or anything else you're animating //you can either set them to the final animation values //or set them as they currently are to cancel the animation }) { (completed) -> Void in }; } 

Esta respuesta también puede ser útil.