当前位置:  开发笔记 > IOS > 正文

过渡UINavigationBar颜色?

如何解决《过渡UINavigationBar颜色?》经验,为你挑选了1个好方法。

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

我的应用程序设置为基于选项卡的应用程序,UITabBarControllerUINavigationController在每个选项卡中嵌套.UINavigationController每个选项卡的内部都是UITableView.当我在表格中选择一个项目时,我正在使用pushViewController滑动到下一个视图,并且我已经设置hidesBottomBarWhenPushed在下一个视图控制器中以便滑动标签.这种行为非常接近iPod"正在播放"页面,这几乎是完美的.

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

有谁知道我在这里缺少什么?它似乎是一个非常简单和常见的UI,我在几个应用程序中看到过,但似乎没有一个明显的方法来做到这一点.



1> Hilton Campb..:

安德鲁的答案实际上运作得很好,但我会添加两件事来让它更好地运作:

    通过类别而不是子类提供功能.更不用说了.

    仅在绝对必要时才使用转换.这样做的原因是,当使用这种技术时,原始的标题文本会消失,而不是从侧面滑落.它是微妙的,但如果它发生在酒吧风格实际上没有变化的过渡期间会更加明显.所以我避免这种情况.

这是我的类别代码(我在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];
}

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有