7

是否可以通过动画更改色调以获得更平滑的效果?

这对我不起作用:

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

我不确定是否甚至可以使用原生苹果组件,因为我猜他们将使用 CG 来生成渐变......只是想在我开始构建自己的解决方案之前找出答案......

干杯伙计们:)

4

3 回答 3

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 中截取的,我在各个地方使用淡入淡出,因此是辅助函数。

于 2012-09-17T09:26:57.570 回答
4

您不能为条形着色设置动画 - 可以以这种方式设置动画的属性列表(对于 UIView)在此处

我认为你根本无法做到这一点,除非你想用一个背景颜色正在改变的 UIView 覆盖一个具有中性色调的栏。backgroundColor 是可以设置动画的属性之一。但是如果你想把 UIView 放在导航栏的顶部,你可能不得不偷偷摸摸,我不知道有什么方法可以做到这一点。

另一个想法 - 在drawRect中继承并自己绘制?

于 2011-04-12T01:01:37.037 回答
4

我们在另一个线程中找到了解决方案:Transition Color navBar

解决方案是为属性 barTinTColor 设置动画。这是代码:

 self.navigationController.navigationBar.barTintColor = [UIColor redColor];
 [UIView animateWithDuration:5.0f animations:^{
    self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
} completion:^(BOOL finished) {
}];
于 2013-12-05T10:09:25.930 回答