Lukas Kukacka
Lukas Kukacka

Reputation: 7704

iOS 7 UINavigationController NavBar per controller color animation

Is there any way to have different barTintColor of UINavigationController's UINavigationBar on different pushed controllers with smooth color transition animation?

I'd like to have a smooth animation of UINavigationBar's tint color during UINavigationController's push/pop animation and ideally also interactive pop (gesture based controller pop).

Why do I need this? I'd like to have 1 controller in the navigation stack to have different tint color indicating status of some task (red / green etc.).

What I have tried so far:

Thank you everyone for any ideas and answers

Upvotes: 6

Views: 2515

Answers (1)

Noel
Noel

Reputation: 1174

You can get this by using UIViewControllerTransitionCoordinator.

  1. Copy the example code to the AController and customize the colors.
  2. Copy the example code to the BController and customize the colors.
  3. That's it! During UINavigationController's push/pop transition, the AController's style will smoothly fade in/out to BController's style.

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

Upvotes: 26

Related Questions