iphone - 过渡 UINavigationBar 颜色?

标签 iphone cocoa-touch

我基本上是在尝试在 iPhone 上复制 iPod 应用程序的行为,当您选择一首歌曲时,音乐播放器 View 会滑入,并且导航栏会转换为新的颜色。

我的应用程序设置为基于选项卡的应用程序,每个选项卡中都有 UITabBarController 和嵌套的 UINavigationController。每个选项卡的每个 UINavigationController 内部都有一个 UITableView。当我在表中选择一个项目时,我使用 pushViewController 滑动到下一个 View ,并且我在下一个 View Controller 中设置了 hidesBottomBarWhenPushed 以便滑动标签消失。该行为与 iPod“正在播放”页面非常接近,几乎完美。

最后一个问题是我无法转换导航栏的颜色,就像 iPod 应用程序中的导航栏从蓝色淡入黑色一样。我能够在新 View 出现后强制更改颜色(在 viewWillAppear 中),但更改是突然的,并且不会模仿 iPod 应用程序的行为,并具有淡入淡出效果。

有人知道我在这里缺少什么吗?这似乎是一个非常简单且常见的 UI,我在多个应用程序中都见过,但似乎没有明显的方法来做到这一点。

最佳答案

安德鲁的答案实际上效果很好,但我会添加两件事以使其更好:

  1. 通过类别而不是子类化提供功能。非常非常不那么困惑。
  2. 仅在绝对必要时才使用转换。其原因是,当使用此技术时,原始标题文本只会消失,而不是从侧面滑落。这是微妙的,但如果它发生在酒吧风格实际上没有改变的过渡期间,就会更加明显。所以我会避免这种情况。

这是我的类别代码(我在 UINavigationBar 和 UIToolbar 的类别中都有它):

- (void)setBarStyle:(UIBarStyle)barStyle animated:(BOOL)animated {
    if (animated && self.barStyle != barStyle) {
        CATransition *transition = [CATransition animation];
        transition.duration = 0.2;
        transition.timingFunction = [CAMediaTimingFunction
            functionWithName:kCAMediaTimingFunctionEaseIn];
        [self.layer addAnimation:transition forKey:nil];
    }

    [self setBarStyle:barStyle];
}

这就是我使用它的方式:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [[UIApplication sharedApplication]
        setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
    [self.navigationController.navigationBar
        setBarStyle:UIBarStyleBlackTranslucent animated:YES];
    [self.navigationController.toolbar
        setBarStyle:UIBarStyleBlackTranslucent animated:YES];
}

关于iphone - 过渡 UINavigationBar 颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/645232/

相关文章:

iphone - 即使单击更新按钮后,分发配置文件仍然过期

iphone - CoreData 中不同的模型版本

objective-c - 制作离屏可拖动 View (如 iOS 5 通知中心)

iphone - 在 iPhone 邮件应用程序上重新创建蓝色 “unread dot” 的功能

iPhone关于内存管理的问题

iphone - 从头开始使用 Unity3D 或 UDK 或 OPENGL?

iphone - 卸载存储在 NSUserDefaults 中的值时,是否删除了将它们放在那里的应用程序?

iphone - 使用 phonegap 进行连续图像捕获

ios - 在每个 View Controller 中处理远程控制事件

iOS 7 淡入淡出状态栏文本?