如何为侧边菜单

时间:2017-04-25 22:06:36

标签: uigesturerecognizer uitapgesturerecognizer uipangesturerecognizer

我有一个UIViewController添加其他UIViewController作为子项,以便我可以使用他们的view来创建菜单层次结构。以下图像代表我当前的界面。

显示菜单前的界面:

Screenshot of initial view controller

显示菜单后的界面:

Screenshot of menu view controller

以下解释了我的层次结构:

AppDelegate中,我创建了一个MainContainerViewController的实例,并将其设置为window' s rootViewController。视图控制器充当容器,允许我添加智能视图控制器。

MainContainerViewController中,我创建了CenterViewController的实例,并将其添加为rootViewController的{​​{1}}。我将导航控制器添加为子视图控制器,将导航控制器UINavigationController添加为view的子视图。我还创建了MainContainerViewController的实例,将其添加为子视图控制器并将其视图插入导航控制器LeftMenuViewController下方。这样,我就可以点按view的{​​{1}}并通过向右滑动导航控制器UIBarButtonItem来显示菜单。

我在导航控制器CenterViewController中添加了view,这样我就可以通过滑动UIScreenEdgePanGestureRecognizer view来显示菜单在右边。

我在导航控制器的视图中添加了CenterViewController,这样我就可以通过点按导航控制器的视图来关闭菜单。

我希望能够使用view允许用户以交互方式关闭菜单,类似于Slack允许的菜单,如果您熟悉他们的移动UI。

我将摇动手势识别器添加到导航控制器的UITapGestureRecognizer,就像我使用上述两个手势识别器一样。但是,我无法让UIPanGestureRecognizerview一起玩得很好。我尝试过实现UIScreenEdgePanGestureRecognizer方法的组合而没有成功。我觉得手势识别器有点迷失,而且我不知道从哪里开始试图让这些手势识别器发挥得很好。

我已经按照Apple example进行了调整,以适应我的要求。如果未显示菜单,则UIPanGestureRecognizer应允许UIGestureRecognizerDelegate打开菜单。

UIPanGestureRecognizer

我的期望:

  1. 能够使用UIScreenEdgePanGestureRecognizer
  2. 显示菜单
  3. 能够点按func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool { if leftMenuState == .hidden { if gestureRecognizer == panGestureRecognizer && otherGestureRecognizer.view!.isDescendant(of: gestureRecognizer.view!) { return true } } return false } 并关闭菜单
  4. 能够平移UIScreenEdgePanGestureRecognizer并关闭菜单
  5. 会发生什么:

    1. 通过使用CenterViewController进行平移无法打开菜单,因为CenterViewController收到了活动

    2. 菜单由UIScreenEdgePanGestureRecognizer

    3. 打开
    4. 菜单已由UIPanGestureRecognizerUIBarButtonItem

    5. 关闭

      启用预期功能需要做些什么?

0 个答案:

没有答案