UINavigationController,具有跨所有ViewControllers的统一背景

时间:2014-10-28 14:42:03

标签: ios objective-c uinavigationcontroller

我一直在想着UINavigationController有一个图像作为背景,而堆栈上的每个视图控制器都有透明的背景,因此UINavigationController的背景图像可见他们都是。

我尝试以最明显的方式实现这一点(具有全屏图像的根视图控制器和具有透明背景的视图控制器,但这会导致动画出现问题)。

四处寻找我发现HotelTonight app成功实现了这一点。查看其用户界面的录像。我做了:https://www.youtube.com/watch?v=qvynwhCj5oM&list=UUKnxsyMsRRRJs_Yw9GZVOFw

是否有人对实现此目的的正确道路有一些建议?

1 个答案:

答案 0 :(得分:0)

将UIViewController子类化为其背景和导航控制器样式的特定设置可能更好。例如,在UIViewController子类的viewDidLoad方法中,将其背景设置为某个图像。您也可以使用它来设置导航栏的样式(barButtonItems的某些颜色等)。然后,您创建的每个新视图控制器都是蒙皮视图控制器的子类。

如果你的背景是一个图像,当一个新的视图控制器滑过旧的顶部时,你仍会得到奇怪的动画效果;背景也将滑入。根据您想要制作过渡动画的自定义方式,您可以执行一些操作来在过渡期间使用视图。 UIPresentationController可能会提供一些解决方案来进行更自定义的动画过渡。

编辑:为了模拟酒店现在的应用程序,我制作了一个UINavigationController,图像作为背景,控制器顶部有清晰的背景。在推动时,我会在segue发生时将第一个控制器的alpha设置为0。返回时,我将alpha设置为1。

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

    self.view.alpha = 1;
}

-(void)didClickButton:(id)sender {
    [UIView animateWithDuration:.25 animations:^{
        self.view.alpha = 0;
    }];

    // the transition itself is a push segue defined in the storyboard
}

我相信酒店应用程序的背景适用于这种方法,因为它很暗。不确定它是否会对更亮的应用程序或控制器中包含大量内容的应用程序非常有效。