2010-09-03 15 views
5

Kiedy moi iPhone obraca interfejsu, chciałbym zrobić Ściemniane/zejścia zadaniu UIView z UIViewController ... jak ...Fade in/out znikną podczas obracania interfejsu

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3]; 
    theView.alpha = 0; 
    [UIView commitAnimations]; 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3]; 
    theView.alpha = 1; 
    [UIView commitAnimations]; 
} 

ale animacja nie zakończyć przed rozpoczęciem obrotu (możemy zobaczyć widok wyjściową do samodzielnej zmiany rozmiaru) ...

Czy istnieje sposób, aby opóźnić rozpoczęcie obrót?

"czas trwania" to czas trwania animacji obrotowej, prawda?

+0

Witam, jak rozwiązałeś swój problem? – sergiobuj

+0

Nie rozwiązałem tego. Ustawiam czas trwania animacji na 0.1s –

Odpowiedz

7

Zauważyłem, że uruchomienie bieżącej pętli uruchamiania przez taki sam czas jak poprzednia animacja, faktycznie opóźniło obrót.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [UIView animateWithDuration:0.25 animations:^{ 
     theview.alpha = 0.0; 
    }]; 

    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.25]]; 
} 
0

Twój problem wynika z faktu, że do czasu, gdy obiekt Obraca się, ma już ustawioną właściwość orientacji, a blok animacji obsługujący obrót jest gotowy do uruchomienia w oddzielnym wątku. Od the documentation:

Ta metoda jest wywoływana z bloku animacji używanego do obracania widoku. Możesz zastąpić tę metodę i użyć jej do skonfigurowania dodatkowych animacji, które powinny wystąpić podczas obracania widoku.

Proponuję przesłanianie shouldAutorotateToInterfaceOrientation: metodę ogień animację przed powrotem TAK dla obsługiwanych kierunków:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
     // Return YES for supported orientations 
     if (interfaceOrientation == (UIDeviceOrientationPortrait || UIDeviceOrientationPortraitUpsideDown) { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.3]; 
     theView.alpha = 0; 
     [UIView commitAnimations]; 
     } else { 
     [UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.3]; 
     theView.alpha = 1; 
     [UIView commitAnimations]; 
     } 
     return YES; 
} 

Powinno to zapewnić animację biegnie przed kiedykolwiek ustawić orientację UIViewController i ogień obrót animacja. Być może będziesz musiał dodać niewielkie opóźnienie, aby uzyskać efekt, którego szukasz, w zależności od szybkości sprzętowej urządzenia.

Powiązane problemy