2013-10-09 10 views
6

Gibt es eine Möglichkeit UINavigationBar auf verschiedene geschoben Controller mit sanfter Farbübergangsanimation verschiedenen barTintColor von UINavigationController ‚s haben? 'Während UINavigationController s Tönungsfarbe' s Push/Pop Animation und im Idealfall auch interaktiver Pop (Geste basierte Steuerung pop)iOS 7 UINavigationController NavBar pro Controller Farbanimation

Ich mag eine glatte Animation von UINavigationBar haben.

Warum brauche ich das? Ich hätte gerne 1 Controller im Navigationsstack, um eine andere Farbe zu haben, die den Status einer Aufgabe anzeigt (rot/grün etc.).

Was ich versucht habe, so weit:

  • viewWillAppear (Ansicht Lifecycle) Methoden, aber es gibt keine Möglichkeit, die barTintColor (wie setBarTintColor:animated:)
  • ändern barTintColor in [UIView animation...] Block, aber das nur zu animieren belebt seltsamerweise den Rahmen von (wahrscheinlich) etwas Hintergrundebene anstelle von glattem Farbübergang.
  • Um barTintColor in [UIView transitionWithView:...] Block mit UIViewAnimationOptionTransitionCrossDissolve ändern, aber das ändert sich nicht animieren. Ändert sofort die neue Tönungsfarbe nach der Animationsdauer
  • Ich hatte eine Idee von der Implementierung neuer iOS 7 benutzerdefinierten Übergang Berechnung und Änderung der Farbe der Navbar während des Fortschritts, aber das scheint zu großen Overkill (speziell wenn ich ursprüngliche Animation behalten will Aussehen überall)

Vielen Dank an alle für alle Ideen und Antworten

+0

Haben Sie jemals eine Lösung für diese finden? – jpsim

+0

Leider habe ich nicht :-( –

+1

Versuchen Sie, 'barTintColor' innerhalb der' viewWillAppear' Methode in _all_view_controllern zu setzen. Ich hatte dieses Problem, wenn 'barTintColor' nur im zweiten Controller gesetzt wurde. Wenn in allen Controllern eingestellt, bar Tönungsfarbe wird glatt animiert (testete jedoch keine interaktiven Übergänge) – skozin

Antwort

26

Sie dies durch den Einsatz UIViewControllerTransitionCoordinator bekommen kann.

  1. Kopieren Sie den Beispielcode in die AController und passen Sie die Farben an.
  2. Kopieren Sie den Beispielcode in die BController und passen Sie die Farben an.
  3. Das war's! Während UINavigationController Push/Pop-Übergang, wird die AController Stil sanft in/out BController s Stil.

Beispielcode:

-(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

Wie würdest du es für IOS6 machen? – Toad

Verwandte Themen