Objective c 在视图之间进行转换的正确方法,以便导航/选项卡栏可以很好地设置动画

Objective c 在视图之间进行转换的正确方法,以便导航/选项卡栏可以很好地设置动画,objective-c,ios,uinavigationbar,pushviewcontroller,Objective C,Ios,Uinavigationbar,Pushviewcontroller,通过我的应用程序,我有不同颜色的导航栏。 另外,我有一些图形显示在横向中,而我的应用程序的其余部分显示在纵向中。 在一些视图中,我隐藏了我的选项卡栏 我更改了viewDidLoad和ViewWillDisplay中导航栏的颜色 我的问题是视图之间的转换效果看起来很奇怪。 如果导航栏的颜色不同,则颜色变化过快,第一个屏幕也会发生变化。或者您可以看到选项卡栏被删除 我做错了什么 下面是我使用的一些典型代码 CBViewController *nextController = [[CBViewCont

通过我的应用程序,我有不同颜色的导航栏。 另外,我有一些图形显示在横向中,而我的应用程序的其余部分显示在纵向中。 在一些视图中,我隐藏了我的选项卡栏

我更改了viewDidLoad和ViewWillDisplay中导航栏的颜色

我的问题是视图之间的转换效果看起来很奇怪。 如果导航栏的颜色不同,则颜色变化过快,第一个屏幕也会发生变化。或者您可以看到选项卡栏被删除

我做错了什么

下面是我使用的一些典型代码

CBViewController *nextController = [[CBViewController alloc] 
      initWithNibName:@"CBView" bundle:nil];
nextController.title = @"CB";   
nextController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:nextController animated:YES];
我不是在寻找非标准效果,而是一些看起来并不奇怪的东西


尽管如此,我还是看到了从第一个视图到第二个视图的滑动效果,看起来不错。

在你的评论之后,我仍然不确定你在寻找什么——我在我的iTunes中没有看到任何导航栏颜色的变化(他们经常更新iTunes,可能我们正在查看不同的版本)。无论如何,以下代码将导致导航栏在转换到新控制器时更改颜色。因为推送动画只有大约0.3秒,而Ntimer的分辨率限制在大约0.05秒,所以我在从一种颜色到下一种颜色(从绿色到黄色)的过程中执行了六个步骤


我们不知道你做错了什么,因为我们不知道你想要什么。如果你能描述一下你想看什么样的动画,那会很有帮助。@rdlmar看着iTunes,它将导航条的颜色从暗变亮,我想它只需要更快。@rdlmar很有趣,我不知道过渡效果仅限于视图。但很明显,当你看过渡动画代码的时候,它只是改变了视图。我想它不能称之为导航栏上的淡入淡出过渡?@Jules,什么样的淡入淡出?你想完全淡出酒吧吗?你可以为导航栏的alpha值设置动画(就像任何其他UIView子类一样)。老实说,我不确定什么会看起来好/有效。此时,按钮会使用“着色”按钮,这些按钮会将颜色保持到按下或弹出动画结束。但是,色调会在动画开始时更改。我认为在视图和工具栏上滑动滑动效果都会很好。我只是担心它看起来会很奇怪。谢谢你了。@rdlemar,如果酒吧看起来是分开的,我知道什么看起来很神奇。例如AAA按钮AA标题AAAAA BBB按钮BB标题BBB
-(IBAction)pushWithColorChange:(id)sender {
    UIViewController *nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
    [self.navigationController pushViewController:nextController animated:YES];
    [NSTimer scheduledTimerWithTimeInterval:.05 target:self selector:@selector(changeColor:) userInfo:nil repeats:YES];
}

-(void)changeColor:(NSTimer *) timer {
    static float i=0.03;
    self.navigationController.navigationBar.tintColor = [UIColor colorWithHue:.34 - i saturation:.5 brightness:.7 alpha:1];
    i += 0.03;
    if (i > .18) {
        [timer invalidate];
    }
}