非标准导航设计

时间:2014-01-10 23:23:03

标签: ios objective-c cocoa-touch uiviewcontroller

我在一个不适合任何标准Apple ViewControllers的应用程序中处理几个视图,我正在为我的问题寻找最佳解决方案。

这是一个快速模型的样子:

http://pl.tinypic.com/r/2va1kbc/5

我有一个主要的ViewController,它由两部分构成:
1.始终可见的顶部包含一些标志
2.正在改变的内容部分 - 每个内容都是一个类(扩展UIViewController)

现在棘手的部分是我想在内容更改之间做一些动画 - 当用户点击第一个按钮时,顶部向下滑动 - 向下推动当前viewController,覆盖全屏幕,然后用新的viewController内容向上滑动

所以问题是如何构建它以便以后易于使用和扩展(如UINavigationController)。

我创建了一个主视图作为UIViewController,并使用:

添加了topView
 LogoUIViewController *logoViewController = [[LogoUIViewController alloc] init];
 [self.view addSubview:logoViewController.view];

 LoginViewController *loginViewController = [[LoginViewController alloc] init];
 loginViewController.delegate = self;
 [self.view addSubview:loginViewController.view];

我正在使用委托来初始化主视图控制器上的转换,因为我找不到更好的方法。

但是由于这些问题我解决了这个问题:
1.如何使内容视图控制器仅使用部分屏幕(改变大小)?
2.如何为这两个视图设置动画,使它看起来像顶层推送内容? 3.如何以简单的方式交换视图(如UINavigationController popViewController方式)并在它们之间自动初始化动画。

我知道这些是3个问题,但我认为可以用更好的方法构建主视图控制器来解决。有没有人有像这样的自定义导航系统的经验?

1 个答案:

答案 0 :(得分:1)

UIPageViewController可能会有所帮助。它将包含您的内容视图控制器。包含页面视图控制器的根vc也可以成为它的委托。

当您想要启动内容视图更改时,根vc可以使用页面vc的视图执行它喜欢的任何动画(例如向下滑动以显示更大的标题视图)。页面转换完成后,作为代理,可以通过

通知root vc
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed

然后动画恢复它的视图。我认为非常简单,并且在容器vc模式上为您节省了相当多的精力。 Xcode的默认分页应用模板是一个非常好的起点。