2010-03-24 15 views
10

Rozejrzałem się i nie znalazłem tego, czego dokładnie szukałem.Odbijanie animacji po naciśnięciu kontrolera na iPhonie

Czy istnieje sposób na uzyskanie animacji przerzucania podczas przesuwania kontrolera widoku?

Przeczytałem, że można zmienić animację za pomocą modalnego kontrolera widoku, ale AFAIK animacja dla widoku modalnego jest od dołu do góry i to nie jest to, czego szukam. Czy jest jakiś sposób na uzyskanie animacji klapki?

Odpowiedz

2

W przypadku modulowanych kontrolerów widoku można zmienić animację za pomocą właściwości modalTransitionStyle. AFAIK, nie ma możliwości zmiany animacji wypychania kontrolera nawigacyjnego (z wyjątkiem przebudowy UINavigationController od zera).

+0

Dobra, powinno być na tyle na teraz;) Thks. – chacha

+2

Po długim polowaniu otrzymałem ** link github **. Działa to dla mnie https://github.com/devindoty/iOS-Transition-Pack –

51

coś jak to powinno działać

[UIView beginAnimations:@"animation" context:nil]; 
[self.navigationController pushViewController: yourviewcontroller animated:NO]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
[UIView commitAnimations]; 

nie zapomnij ustawić animowany na NO Dzwoniąc pushViewController

+1

czy możemy spowolnić animację? Jest dość szybki .. Pozdrowienia – iscavengers

+4

możesz użyć funkcji setAnimationDuration, aby określić czas trwania w sekundach , taki jak [UIView setAnimationDuration: 1.5]; – John

+3

0.7 wydaje się mieć rację, jeśli chcesz, aby pasowała do aplikacji Pogoda. –

5
- (void)viewWillDisappear:(BOOL)animated { 
[UIView beginAnimations:@"animation2" context:nil]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
[UIView setAnimationDuration: 0.7]; 
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
[UIView commitAnimations]; } 

w nowym viewcontroller pozwoli odwrócić z powrotem tą samą drogą (zamiast przesuwając się w lewo), gdy przycisk Wstecz na pasku narzędzi jest wciśnięty - upewnij się, że animacja jest włączona tutaj, np. jeśli zrobisz niestandardowy przycisk, aby otworzyć stos, użyj:

- (void) backToPrevious: (id) sender 
{ 
    //[self.navigationController popViewControllerAnimated:YES]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+1

Jak wspomniano w dokumentach [UIView] (http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html), metoda 'beginAnimations: context:' jest częścią grupy metod Apple zniechęcają programistów do używania (z iOS 4 i nowszych). Zalecają zamiast tego używanie metod blokowania opartych na UIView (na przykład 'animateWithDuration: animations: completion:'). –

+0

To podejście działało bardzo miło! –

15

Działa to również .. dla iOS 4.0 and greater

[UIView transitionWithView:self.navigationController.view duration:0.8 options:UIViewAnimationOptionTransitionFlipFromLeft 
          animations:^(void) { 
           BOOL oldState = [UIView areAnimationsEnabled]; 
           [UIView setAnimationsEnabled:NO]; 
           [self.navigationController pushViewController:viewController animated:YES]; 
           [UIView setAnimationsEnabled:oldState]; 
          } 
          completion:nil]; 
+0

Nie działa dobrze w iOS7, ponieważ animacja widoku jest przecinana na pół, a następnie "przeskakuje" na pozycję po zakończeniu animacji. Zniechęcony styl Apple nadal działa doskonale. – margusholland