6

C'è un modo per avere diversi barTintColor di UINavigationController s' UINavigationBar su diversi controller spinto con colore transizione graduale animazione?iOS 7 UINavigationController NavBar per controller di animazione di colore

Mi piacerebbe avere una superficie liscia animazione UINavigationBar 'colore di tinta s durante UINavigationController' s push/pop animazione e idealmente anche pop interattivo (gesto controller di pop).

Perché ho bisogno di questo? Mi piacerebbe avere 1 controller nello stack di navigazione per avere colori diversi che indicano lo stato di alcune attività (rosso/verde ecc.).

Quello che ho provato finora:

  • viewWillAppear (vista del ciclo di vita) metodi, ma non v'è alcun modo per animare la barTintColor (come setBarTintColor:animated:)
  • Per cambiare barTintColor in [UIView animation...] blocco, ma che appena anima stranamente il frame di (probabilmente) qualche livello di sfondo invece della transizione di colore uniforme.
  • Per modificare barTintColor nel blocco [UIView transitionWithView:...] con UIViewAnimationOptionTransitionCrossDissolve, ma ciò non modifica le animazioni. Modifica istantaneamente al nuovo colore della tinta dopo la durata dell'animazione
  • Ho avuto un'idea di implementare la nuova transizione personalizzata iOS 7 calcolando e cambiando il colore della barra di spostamento durante l'avanzamento, ma sembra essere un grande overkill (specialmente se voglio mantenere l'animazione originale aspetto in tutto il mondo)

Grazie a tutti per tutte le idee e risposte

+0

Hai mai trovare una soluzione per questo? – jpsim

+0

Sfortunatamente, non ho :-( –

+1

Prova a impostare 'barTintColor' all'interno del metodo' viewWillAppear' in _all_ Visualizza controller. Ho riscontrato questo problema quando 'barTintColor' è stato impostato solo nel secondo controller. Quando è impostato su tutti i controller, barra il colore della tinta è animato senza intoppi (non testò però le transizioni interattive) – skozin

risposta

26

È possibile ottenere questo utilizzando UIViewControllerTransitionCoordinator.

  1. Copia il codice di esempio su AController e personalizza i colori.
  2. Copia il codice di esempio su BController e personalizza i colori.
  3. Questo è tutto! Durante la transizione push/pop di UINavigationController, lo stile di AController si dissolve in modo uniforme in/out allo stile BController.

codice Esempio:

-(void) viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:animated]; 

    [[self transitionCoordinator] animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     self.navigationController.navigationBar.translucent = NO; 
     self.navigationController.navigationBar.barStyle = UIBarStyleDefault; 

     // text color 
     [self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}]; 

     // navigation items and bar button items color 
     self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; 

     // background color 
     self.navigationController.navigationBar.barTintColor = [UIColor blueColor]; 
    } completion:nil]; 
} 
+0

Come lo faresti per IOS6? – Toad