2010-03-24 9 views
10

Ho dato un'occhiata in giro e non ho trovato quello che stavo cercando esattamente.Capovolgere l'animazione quando il controller ha spinto su iPhone

C'è un modo per ottenere un'animazione di vibrazione quando si spinge un controller di visualizzazione?

Ho letto che è possibile modificare l'animazione utilizzando un controller di visualizzazione modale, ma AFAIK l'animazione per una vista modale è dal basso verso l'alto e non è quello che sto cercando. C'è un modo per ottenere un'animazione di vibrazione in qualche modo?

risposta

2

Per i controller di vista presentati in modo modale, è possibile modificare l'animazione con la proprietà modalTransitionStyle. AFAIK, non c'è modo di cambiare l'animazione push di un controller di navigazione (eccetto la ricostruzione di UINavigationController da zero).

+0

Va bene, dovrebbe essere sufficiente per ora;) Thks. – chacha

+2

Dopo una lunga caccia ho ottenuto questo link ** github **. Funziona per me https://github.com/devindoty/iOS-Transition-Pack –

51

qualcosa come questo dovrebbe funzionare

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

non dimenticare di impostare animato per no quando chiama pushViewController

+1

possiamo rallentare l'animazione? È piuttosto veloce .. Saluti – iscavengers

+4

è possibile utilizzare setAnimationDuration per specificare una durata in secondi come [UIView setAnimationDuration: 1.5]; – John

+3

0.7 sembra avere ragione, se vuoi che corrisponda all'app Meteo. –

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]; } 

nel nuovo viewcontroller renderà capovolgere di nuovo allo stesso modo (invece di a sinistra) quando viene premuto il pulsante Indietro nella barra degli strumenti - assicurati che l'animazione sia abilitata qui, ad esempio, se fai un pulsante personalizzato per far saltare la pila, usa:

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

Come menzionato nei [documenti UIView] (http://developer.apple.com/library/ios/#documentation/uikit/reference/uiview_class/uiview/uiview.html), il metodo 'beginAnimations: context:' è parte di un gruppo di metodi che Apple scoraggia gli sviluppatori dall'utilizzo (da iOS 4 e successivi). Raccomandano invece di utilizzare i metodi di animazione basati su blocchi di UIView (ad esempio, 'animateWithDuration: animations: completion:'). –

+0

Questo approccio ha funzionato molto bene per me! –

15

Questo funziona anche .. per 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

Non funziona bene su iOS7, poiché l'animazione della vista è dimezzata e quindi "salta" in posizione quando l'animazione è terminata. Il modo Apple scoraggiato funziona ancora perfettamente però. – margusholland