2013-10-09 102 views
6

是否有任何方式以具有不同的在不同的推控制器与平滑的颜色过渡动画UINavigationControllerUINavigationBarbarTintColor的iOS 7的UINavigationController的NavBar控制器彩色动画

我想有“期间UINavigationController小号色调颜色的压入/弹出动画并且理想地还交互式弹出(基于姿势控制器弹出)UINavigationBar的平滑的动画。

为什么我需要这个?我想在导航堆栈中有1个控制器具有不同的色调颜色,指示某些任务的状态(红色/绿色等)。

我迄今为止尝试:

  • viewWillAppear(查看生命周期)的方法,但没有办法动画barTintColor(如setBarTintColor:animated:
  • [UIView animation...]块改变barTintColor,但只是奇怪地动画框(可能)一些背景层而不是平滑的颜色过渡。
  • 要更改barTintColor[UIView transitionWithView:...]块与UIViewAnimationOptionTransitionCrossDissolve,但这并不影响变化。在动画持续时间后立即改变为新的色调颜色
  • 我有一个想法实现新的iOS 7自定义过渡计算和改变导航过程中的颜色,但这似乎是大矫枉过正(特别是如果我想保留原始动画外观无处不在)

谢谢大家的任何想法和答案

+0

你有没有找到一个解决方案? – jpsim

+0

不幸的是,我没有:-( –

+1

尝试在_all_视图控制器中设置'viewWillAppear'方法中的'barTintColor'。当barTintColor只在第二个控制器中设置时,我遇到了这个问题。色调的颜色是平滑的动画(虽然没有测试交互转换) – skozin

回答

26

您可以通过使用UIViewControllerTransitionCoordinator得到这个。

  1. 将示例代码复制到AController并自定义颜色。
  2. 将示例代码复制到BController并自定义颜色。
  3. 就是这样!在UINavigationController的推/换过程中,AController的风格将平滑淡入/淡出至BController的风格。

示例代码:

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

你会如何做IOS6? – Toad