6

是否有可能与动画改变色调的平滑效果?UINavigationBar的改变色调的颜色与动画

这并没有为我工作:

[UIView beginAnimations:nil context:nil]; 
[self.navigationController.navigationBar setTintColor:[UIColor greenColor]]; 
[UIView commitAnimations]; 

我如果不知道它使用本地苹果的部件,甚至有可能因为我估计他们将使用CG生成的梯度......只是想找出之前,我将开始构建自己的解决方案......

干杯家伙:)

+0

如果你看到这个帖子,这是历史,我们发现在另一个线程的解决方案:http://stackoverflow.com/questions/20377628/transition-color/20396308?noredirect=1# 20396308 – Pull 2013-12-05 10:02:36

回答

25

你不会相信我经历了真正实现这个目标的长度;它让我感到懊恼不已,这不是股票iOS功能,而tintColor的过渡看起来很丑,而推动/弹出viewController的动画非常流畅。

There'a很多代码检查淡入淡出,我甚至写了一个名为PSPDFNavigationAppearanceSnapshot的类来保存导航状态时弹出。 (我有这个想法从真棒NimbusKit

实际的动画是很容易的:

[self.navigationController.navigationBar.layer addAnimation:PSPDFFadeTransition() forKey:nil]; 

CATransition *PSPDFFadeTransition(void) { 
    return PSPDFFadeTransitionWithDuration(0.25f); 
} 

CATransition *PSPDFFadeTransitionWithDuration(CGFloat duration) { 
    CATransition *transition = [CATransition animation]; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionFade; 
    transition.duration = duration; 
    return transition; 
} 

您可以更加紧凑的代码;它是从我的iOS PDF库PSPDFKit中剪下来的,并且我在各个地方使用了淡入淡出,因此也是帮助函数。

+1

为什么在PSPDFFadeTransitionWithDuration中你有一个持续时间参数,你永远不会使用它?它认为你忘了写transition.duration =持续时间 – 2012-12-18 21:07:00

+0

正确,需要添加。 – steipete 2012-12-19 00:05:43

4

你不能动画吧色调 - 能以这种方式进行动画属性的列表(一个UIView)是here

我不认为你能做到这一点,在所有除非你想覆盖有中性色调与一个UIView其背景颜色改变吧。 backgroundColor是可以动画的属性之一。但是如果你想将UIView放在导航栏的顶部,你可能必须要狡猾,我不知道有办法做到这一点。

另一个想法 - 子类,做绘图自己的drawRect?

4

我们发现在另一个线程解决方案:Transition Color navBar

溶液动画的attribut barTinTColor。下面是代码:

self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 
[UIView animateWithDuration:5.0f animations:^{ 
    self.navigationController.navigationBar.barTintColor = [UIColor blueColor]; 
} completion:^(BOOL finished) { 
}];