2016-03-23 14 views
5

Mam CollectionView i chcę utworzyć animację wewnątrz CollectionViewCell wybranego przez użytkownika. Wybrałem opcję animateKeyframesWithDuration, ponieważ chcę utworzyć krok po kroku niestandardową animację. Mój kod wygląda następująco:Zatrzymaj animację iOS przed zakończeniem.

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

Jest wykonywany wewnątrz niestandardowego CollectionViewCell, gdy jest wybrany. Problem polega na tym, że chcę wymusić natychmiastowe zatrzymanie animacji w pewnym określonym momencie. Ale kiedy to robię, animacja nie zatrzymuje się całkowicie, po prostu przesuwa pozostałą animację na inną komórkę (prawdopodobnie ostatnią ponownie wykorzystaną komórkę?)

Nie mogę zrozumieć, dlaczego tak się dzieje. Próbowałem różnych podejść, ale żadna z nich nie zatrzymała animacji przed normalnym wejściem do bloku zakończenia. Czy ktoś ma jakiś pomysł na ten temat?

+0

pan znaleźć rozwiązanie dla tego? – swalkner

Odpowiedz

0

Zamiast usuwać animacje z warstwy, można spróbować dodać kolejną animację o bardzo krótkim czasie trwania, która ustawia właściwości widoku, które mają zostać zatrzymane podczas animacji.

coś takiego:

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

To nadal nie działa. Na wybranej komórce animacja zatrzymuje się normalnie. Prawdziwy problem polega na tym, że trwa on w innej komórce. Próbowałem również z UIView.setAnimationsEnabled (false), ale na próżno. To naprawdę denerwujące – razvan

Powiązane problemy