0

我知道这个主题已经有所涉及,但我没有看到我需要发布的确切内容。抱歉,如果我错过了它。基本上我想要一些与 Facebook 滑出式导航菜单非常相似的东西。我在这里看到了指向使用 ViewDeck 的帖子,但由于各种原因,我想自己动手。我的应用程序基于导航控制器,我计划在导航栏上有一个按钮来切换菜单视图的可见性。

我的问题不是一般如何创建和管理这样一个视图,而是更具体地说,我如何为这个视图创建一个视图控制器并让它始终存在和可用,无论我的导航顶部当前是什么视图控制器控制器的堆栈?我正在使用情节提要,我的第一个想法是向我的主导航控制器添加一个容器视图并在那里添加菜单视图,但正如我所怀疑的那样,情节提要编辑器不允许我直接向我的导航控制器添加任何视图。我知道这是有道理的,无需向我解释为什么我无法做到这一点,包括更多以表明我想做这样的事情 - 在全球最高级别创建它,所以它总是无需由我的应用程序中的每个视图控制器创建。

我希望我的问题很清楚。以防万一,让我说明一下我的想法 - 如果我在我的初始根视图控制器中添加了一个容器视图,我设法隐藏并从侧面滑出,一旦我通过在我的导航堆栈,此菜单视图将不再存在。当然,我不希望随后被要求为我的应用程序中的每个不同的视图控制器创建它。

非常感谢任何建议或帮助。

4

4 回答 4

2

好吧,我不确定我的建议是否与您正在寻找和上面提到的完全相同。但是让我试着为你画一个视觉草图。

  1. 创建一个菜单视图作为 UIViewController 并根据需要设置设计。
  2. 使用 Hide & Show 方法在同一视图中为您的菜单架构实现设计和逻辑,这些方法将对各自的委托做出反应。现在,您的菜单视图已准备好作为普通视图,通常我们可以推送和弹出来导航。现在,重头戏开始了。
  3. 由于您的应用程序有一个 UINavigationController,它将有一个自定义工具栏,其中包含一个 UIButton 来欢迎菜单视图。
  4. 现在,将创建一个 menuview 的单例实例来管理整个应用程序的通用菜单操作,最重要的是,它将添加到 UIWindow 上。
  5. 这个单例菜单视图实例将根据自定义工具栏按钮的要求请求显示/隐藏。
  6. 根据显示/隐藏的要求,应用具有预期逻辑的相应动画。
  7. 在请求 Hide 时,menuview 将从 UIWindow 中移除,并且下次需要 Show 时再次在 UIWindow 上添加它。

希望,这可能对你有用。如果有任何误解,请告诉我。

于 2013-02-26T17:47:18.123 回答
1

您可以使用一些可用的开源控件,例如 JASidePanels(此处)。

于 2013-02-26T17:41:05.403 回答
1

实际上,我刚刚完成了一个项目,该项目完全符合您的要求。

这是我采取的步骤。

  • 做了一个视图控制器
  • 在左侧添加了菜单导航
  • 在菜单导航上添加 UIView
  • 添加了用于左右滑动的 IBActions,带有这样的动画......

    [UIView animateWithDuration:.25f delay:0.0 options:0
                 animations:^{
                     [mainView setFrame:CGRectMake(0, mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height)];
    
                 }
                 completion:^(BOOL finished){
    }];
    
  • 在同一个视图控制器中添加了其他视图

所以几乎你的一个主视图控制器拥有你所有的视图,你只需用一个按钮或 UIGestureRecognizers 动画它们左右滑动。您可以使用容器视图将子视图控制器嵌套在该主视图控制器中,以使代码端更易于管理。

于 2013-02-27T03:45:20.117 回答
-2

感谢您的建议。我不想使用 3rd 方库,部分原因是我不想有完全相同的行为。例如,我希望菜单出现在内容视图之上,而不是侧边菜单将主视图推开。我还希望它出现在导航栏下方。另外,我没有使用正确的菜单,因此我可以使用更轻的代码来处理我需要的内容。

我想我已经想出了一个解决方案。我创建了一个菜单视图控制器,并在我的应用程序委托中添加了对此的引用。现在无论用户在哪里,当他或她单击菜单按钮时,它都会调用应用程序委托上的一个方法来隐藏或显示菜单。因此应用程序委托处理动画并添加和删除菜单作为当前显示的视图控制器的子视图。

于 2013-02-26T19:27:27.887 回答