2014-09-02 11 views
9

Czekam zamknięcie zakończenia na tej animacji UIView być nazywany po określonym czasie trwania, jednak wydaje się być natychmiast wypalanie ...Swift UIView animateWithDuration zamknięcie zakończenie nazywa natychmiast

UIView.animateWithDuration(
     Double(0.2), 
     animations: { 
      self.frame = CGRectMake(0, -self.bounds.height, self.bounds.width, self.bounds.height) 
     }, 
     completion: { finished in 
      if(finished) { 
       self.removeFromSuperview() 
      } 
     } 
    ) 

Czy ktoś doświadczony to? Czytałem, że inni mieli większy sukces, używając centrum, a nie ramki, aby przenieść widok, jednak miałem podobne problemy z tą metodą.

+0

Gdzie można wykonać ten kod? – akashivskyy

+3

Upewnij się, że ramka * faktycznie * zmienia się, ponieważ blok zakończenia jest wywoływany natychmiast, gdy nie ma animacji. – akashivskyy

+0

W niestandardowej klasie UIView. Animuję widok na miejscu, aby rozpocząć od init(), następnie powyższy kod jest wywoływany, gdy kliknięcie pojawi się w dowolnym miejscu. Ramka zdecydowanie zmienia się też ... –

Odpowiedz

0

postanowiłem to w końcu przesuwając animację z hitTest() i do touchesBegan() w UIView

8

dla nikogo, że ma problem z tym, jeśli coś jest przerwanie animacji, zamknięcie ukończenie jest natychmiast wezwał . W moim przypadku było to spowodowane niewielkim nakładaniem się z modalnym przejściem kontrolera widoku, z którego rozwijana była niestandardowa zmiana. Używanie części nie miało dla mnie żadnego efektu. Skończyło się na użyciu GCD, aby opóźnić animację o ułamek sekundy.

// To avoid overlapping with the modal transiton 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(0.2 * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), { 

    // Animate the transition 
    UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { 

     // Animations 

     }, completion: { finished in 

     // remove the views 
     if finished {    
      blurView.removeFromSuperview() 
      snapshot.removeFromSuperview() 
     } 
    }) 
}) 
Powiązane problemy