2016-03-23 9 views
5

Ho un oggetto CollectionView e voglio creare un'animazione all'interno del CollectionViewCell selezionato dall'utente. Ho scelto di utilizzare animateKeyframesWithDuration perché voglio creare un'animazione personalizzata passo dopo passo. Il mio codice è simile al seguente:iOS stop animateWithDuration prima del completamento

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() 
      } 
     } 
} 

Questo viene eseguito all'interno del CollectionViewCell personalizzato quando viene selezionato. Il problema è che voglio forzare l'arresto dell'animazione immediatamente ad un certo punto. Ma quando lo faccio, l'animazione non si ferma completamente, sposta semplicemente l'animazione rimanente su una cella diversa (probabilmente l'ultima cella riutilizzata?)

Non riesco a capire perché questo sta accadendo. Ho provato approcci diversi ma nessuno di essi ha fermato l'animazione prima di entrare normalmente nel blocco di completamento

Qualcuno ha qualche idea al riguardo?

+0

hai trovato una soluzione per questo? – swalkner

risposta

0

Invece di rimuovere le animazioni dal livello, è possibile provare ad aggiungere un'altra animazione con una durata molto breve che imposta le proprietà della vista che si desidera interrompere l'animazione.

Qualcosa di simile a questo:

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 
    }; 
} 

This answer may also be helpful.

+0

Ancora non funziona. Nella mia cella selezionata l'animazione si arresta normalmente. Il vero problema è che continua su un'altra cella. Ho anche provato con UIView.setAnimationsEnabled (false) ma invano. Questo è davvero fastidioso – razvan

Problemi correlati