是否可以通过动画更改色调以获得更平滑的效果?
这对我不起作用:
[UIView beginAnimations:nil context:nil];
[self.navigationController.navigationBar setTintColor:[UIColor greenColor]];
[UIView commitAnimations];
我不确定是否可以使用原生苹果组件,因为我猜他们将使用CG生成渐变...只是想在我开始构建自己的解决方案之前找出...
干杯们:)
答案 0 :(得分:26)
你不会相信我经历的那段时间才能真正实现这一目标;让我感到恼火的是,这不是一个iOS版本的功能,而且tintColor的转换看起来很难看,而推动/弹出一个viewController的动画是如此流畅。
有许多代码在淡出时检查,我甚至编写了一个名为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 :(得分:4)
您无法为条形色彩设置动画 - 可以通过这种方式设置动画的属性列表(对于UIView)为here。
我认为你根本不能这样做,除非你想用一个背景颜色正在变化的UIView叠加一个具有中性色调的条。 backgroundColor是可以设置动画的属性之一。但如果您想在导航栏上放置UIView,我可能不得不偷偷摸摸,我不知道如何做到这一点。
另一个想法 - 在drawRect中自己进行子类化和绘图?
答案 2 :(得分: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) {
}];