6

Est-il possible d'avoir différentes barTintColor de l » UINavigationBarUINavigationController sur différents contrôleurs poussés avec animation de transition de couleur douce?iOS 7 UINavigationController NavBar par contrôleur animation couleur

Je voudrais avoir une animation fluide de UINavigationBar 'couleur de teinte s pendant UINavigationController' s push/pop animation et idéalement aussi pop interactive (contrôleur basé geste pop).

Pourquoi ai-je besoin de cela? J'aimerais avoir 1 contrôleur dans la pile de navigation pour avoir une couleur différente indiquant le statut de certaines tâches (rouge/vert, etc.).

Ce que j'ai essayé jusqu'à présent:

  • viewWillAppear méthodes (vue du cycle de vie), mais il n'y a aucun moyen d'animer le barTintColor (comme setBarTintColor:animated:)
  • Pour changer barTintColor dans le bloc [UIView animation...], mais seulement étrangement anime le cadre de (probablement) une couche de fond au lieu d'une transition de couleur lisse.
  • Pour changer barTintColor dans [UIView transitionWithView:...] bloquer avec UIViewAnimationOptionTransitionCrossDissolve, mais cela n'anime pas le changement. J'ai immédiatement eu l'idée d'implémenter la nouvelle transition personnalisée iOS 7 en calculant et en changeant la couleur de la barre de navigation pendant la progression, mais cela semble être une grosse overkill (surtout si je veux garder l'animation originale) apparition partout)

Merci à tous pour toutes les idées et répond

+0

Avez-vous trouvé jamais une solution pour cela? – jpsim

+0

Malheureusement, je n'ai pas :-( –

+1

Essayez de mettre 'barTintColor' dans la méthode' viewWillAppear' dans les contrôleurs _all_ view.J'ai eu ce problème lorsque 'barTintColor' a été défini uniquement dans le second contrôleur. la couleur de la teinte est animée doucement (n'a pas testé les transitions interactives cependant) – skozin

Répondre

26

vous pouvez obtenir en utilisant UIViewControllerTransitionCoordinator.

  1. Copiez le code exemple à la AController et personnaliser les couleurs.
  2. Copiez l'exemple de code sur BController et personnalisez les couleurs.
  3. C'est tout! Pendant la transition push/pop de UINavigationController, le style de AController se fondra progressivement dans le style de BController.

Exemple Code:

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

Comment le feriez-vous pour IOS6? – Toad

Questions connexes