2016-03-23 16 views
5

Ich habe eine CollectionView und ich möchte eine Animation in der CollectionViewCell erstellen, die vom Benutzer ausgewählt wurde. Ich habe mich für animateKeyframesWithDuration entschieden, weil ich eine benutzerdefinierte Animation Schritt für Schritt erstellen möchte. Mein Code sieht wie folgt aus:iOS stopp animateWithDuration vor der Fertigstellung

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

Diese innerhalb der benutzerdefinierten CollectionViewCell ausgeführt wird, wenn es ausgewählt ist. Das Problem ist, dass ich zwingen möchte, die Animation sofort an einem bestimmten Punkt zu stoppen. Aber wenn ich das mache, stoppt die Animation nicht vollständig, sondern bewegt die verbleibende Animation nur auf eine andere Zelle (wahrscheinlich die letzte wiederverwendete Zelle?)

Ich kann nicht verstehen, warum das passiert. Ich habe verschiedene Ansätze ausprobiert, aber keiner von ihnen stoppt erfolgreich die Animation, bevor normalerweise der Abschlussblock betreten wird.

Hat jemand eine Ahnung davon?

+0

Sie eine Lösung dafür gefunden? – swalkner

Antwort

0

Anstatt die Animationen aus der Ebene zu entfernen, können Sie versuchen, eine weitere Animation mit einer sehr kurzen Dauer hinzuzufügen, die die Ansichtseigenschaften festlegt, die nicht mehr animiert werden sollen.

Etwas wie folgt aus:

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

Es funktioniert immer noch nicht. Auf meiner ausgewählten Zelle stoppt die Animation wie gewohnt. Das eigentliche Problem ist, dass es in einer anderen Zelle weitergeht. Ich habe es auch mit UIView.setAnimationsEnabled (false) versucht, aber vergebens. Das ist wirklich nervig – razvan