【问题标题】:Design for nonstandard navigation非标准导航设计
【发布时间】:2014-01-10 23:23:03
【问题描述】:

我正在处理一个不适合任何标准 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. 如何为这 2 个视图设置动画,使其看起来像顶层正在推开内容?
3. 如何以简单的方式交换视图(如 UINavigationController popViewController 方式)并在它们之间自动初始化动画。

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

【问题讨论】:

    标签: ios objective-c cocoa-touch uiviewcontroller


    【解决方案1】:

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

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

    - (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
    

    然后动画恢复它的视图。我认为非常简单,并且在容器 vc 模式上为您节省了大量的精力。 Xcode 的默认 Paged App 模板是一个非常好的起点。

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2023-03-30
      • 2019-05-06
      相关资源
      最近更新 更多