2013-02-08 13 views
6

To proste wystarczy, aby ożywić widok:Fade i fade out UIView, gdy jest on w ruchu

[UIView animateWithDuration:1.0 
        animations:^{theView.center = newCenter; theView.alpha = 0;} 
        completion:^(BOOL finished){ 
         [theView removeFromSuperview]; 
        }]; 

Problemem jest to, że kiedy dodać go jako podrzędny, chcę to zanikać i już patrzeć jakby się poruszał. Teraz pojawia się natychmiast, po czym porusza się i zanika.

Muszę więc ustawić początkową wartość alfa na zero, szybko zaniknąć, gdy się porusza, a następnie zaniknąć. Czy to możliwe dzięki animacjom UIView? Nie mogę mieć dwóch konkurujących bloków animacji pracujących nad tym samym obiektem, prawda?

+0

ja nie nadążam: Twój kod jest typowym przykładem "przesuń i zejdź". Ale wtedy mówisz o "kiedy dodaję to jako wywiady". Czy dodajesz to? Lub usunięcie? Ale w odpowiedzi na twoje pytanie nie powinieneś potrzebować wielu bloków animacji. To tylko kwestia tego, co próbujesz zrobić. – Rob

+0

Oto podobny post z wieloma dobrymi odpowiedziami animacji: http://stackoverflow.com/questions/5040494/objective-c-ios-development-animations-autoreverse – escrafford

Odpowiedz

12

Wszystko, co musisz zrobić, to zastosować 2 animacje w tył. Coś takiego ::

theView.alpha = 0; 
[UIView animateWithDuration:1.0 
       animations:^{ 
        theView.center = midCenter; 
        theView.alpha = 1; 
       } 
       completion:^(BOOL finished){ 
        [UIView animateWithDuration:1.0 
             animations:^{ 
              theView.center = endCenter; 
              theView.alpha = 0; 
             } 
             completion:^(BOOL finished){ 
              [theView removeFromSuperview]; 
             }]; 
       }]; 

Więc w 1 sekundy pojawi się ono podczas ruchu, a potem w następnej sekundzie będzie zanikanie

nadzieję, że to pomaga

+0

To powinno zadziałać, mimo że wymaga dodatkowego punktu centralnego do obliczenia. Skończyło się na zastosowaniu animacji CABasicAnimation dla ruchu i animacji UIView dla alfa. – soleil

2

Umieść początkowy blok animacji alpha = 0 poza polem.

theView.alpha = 0; 
[UIView animateWithDuration:1.0 
       animations:^{ 
        theView.center = newCenter; 
        theView.alpha = 1; 
       } 
       completion:^(BOOL finished){ 
        // Do other things 
       }]; 
+1

To działa, aby zaniknąć, ale nie wiem, dlaczego nie działa przy zaniku.? – Envil