如何将手势识别器添加到 ViewController 及其子项?
how to add gesture recognizer to ViewController and to its Children?
我正在制作类似于 Euro Sport 的应用程序。我的 rootviewController 是 pageViewController,它有 3 VCs。左右滑动可以更改 VC。接下来,我添加了侧边栏菜单。我想将手势识别器添加到整个 rootViewController。这就是我添加手势的方式:
self.exitPanGesture = UIPanGestureRecognizer()
self.exitPanGesture.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture)
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
当我拖动 rootviewController 点击导航栏时,它起作用了。但是其他部分如segmentcontrol, pageContent 不工作
我在这里设置 sourceViewController:
func resetToMainPage(index: Int!) {
/* Getting the page View controller */
mainPageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("MainPageViewController") as UIPageViewController
self.mainPageViewController.dataSource = self
self.mainPageViewController.delegate = self
pageContentViewController = self.viewControllerAtIndex(index)
// self.transtionManger.sourceViewController = pageContentViewController // adding swipe to the pageContentViewControlle in order to close menu
self.transtionManger.sourceViewController = mainPageViewController
self.mainPageViewController.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
self.mainPageViewController.view.frame = CGRectMake(0, 102, self.view.frame.width, self.view.frame.height)
self.addChildViewController(mainPageViewController)
self.view.addSubview(mainPageViewController.view)
self.mainPageViewController.didMoveToParentViewController(self)
}
所以,我的问题是如何将手势识别器添加到整个 rootViewController,包括 navbar、segmentcontrol、pageviewcontrol?
手势识别器只能附加到一个视图。所以下面的行意味着只有 navigationController?.view
正在添加手势。
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture)
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
您可以为每个要使用的视图复制手势识别器,然后以这种方式添加它们。
self.exitPanGesture1 = UIPanGestureRecognizer()
self.exitPanGesture1.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture1)
self.exitPanGesture2 = UIPanGestureRecognizer()
self.exitPanGesture2.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture2)
伙计们,我解决了我的问题,但我遇到了另一个问题。在我的例子中,我创建了 exitGestureRecognizer。我想将其添加到整个 viewcontroller 视图中。所以,这是我的代码:
for singleView in self.sourceViewController.view.subviews {
singleView.addGestureRecognizer(exitPanGesture)
singleView.navigationController??.view.addGestureRecognizer(exitPanGesture)
}
出于某种原因,navBar.view 上的识别器不起作用。如果我这样写代码:
for singleView in self.sourceViewController.view.subviews {
singleView.addGestureRecognizer(exitPanGesture)
singleView.navigationController??.view.addGestureRecognizer(exitPanGesture)
}
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
只有导航栏手势有效,子视图手势无效。如果我更改此代码的顺序。导航栏手势不起作用,但子视图手势有效。如何向两个视图添加手势?
我正在制作类似于 Euro Sport 的应用程序。我的 rootviewController 是 pageViewController,它有 3 VCs。左右滑动可以更改 VC。接下来,我添加了侧边栏菜单。我想将手势识别器添加到整个 rootViewController。这就是我添加手势的方式:
self.exitPanGesture = UIPanGestureRecognizer()
self.exitPanGesture.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture)
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
当我拖动 rootviewController 点击导航栏时,它起作用了。但是其他部分如segmentcontrol, pageContent 不工作
我在这里设置 sourceViewController:
func resetToMainPage(index: Int!) {
/* Getting the page View controller */
mainPageViewController = self.storyboard?.instantiateViewControllerWithIdentifier("MainPageViewController") as UIPageViewController
self.mainPageViewController.dataSource = self
self.mainPageViewController.delegate = self
pageContentViewController = self.viewControllerAtIndex(index)
// self.transtionManger.sourceViewController = pageContentViewController // adding swipe to the pageContentViewControlle in order to close menu
self.transtionManger.sourceViewController = mainPageViewController
self.mainPageViewController.setViewControllers([pageContentViewController!], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil)
self.mainPageViewController.view.frame = CGRectMake(0, 102, self.view.frame.width, self.view.frame.height)
self.addChildViewController(mainPageViewController)
self.view.addSubview(mainPageViewController.view)
self.mainPageViewController.didMoveToParentViewController(self)
}
所以,我的问题是如何将手势识别器添加到整个 rootViewController,包括 navbar、segmentcontrol、pageviewcontrol?
手势识别器只能附加到一个视图。所以下面的行意味着只有 navigationController?.view
正在添加手势。
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture)
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
您可以为每个要使用的视图复制手势识别器,然后以这种方式添加它们。
self.exitPanGesture1 = UIPanGestureRecognizer()
self.exitPanGesture1.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.view.addGestureRecognizer(self.exitPanGesture1)
self.exitPanGesture2 = UIPanGestureRecognizer()
self.exitPanGesture2.addTarget(self, action:"handleOffstagePan:")
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture2)
伙计们,我解决了我的问题,但我遇到了另一个问题。在我的例子中,我创建了 exitGestureRecognizer。我想将其添加到整个 viewcontroller 视图中。所以,这是我的代码:
for singleView in self.sourceViewController.view.subviews {
singleView.addGestureRecognizer(exitPanGesture)
singleView.navigationController??.view.addGestureRecognizer(exitPanGesture)
}
出于某种原因,navBar.view 上的识别器不起作用。如果我这样写代码:
for singleView in self.sourceViewController.view.subviews {
singleView.addGestureRecognizer(exitPanGesture)
singleView.navigationController??.view.addGestureRecognizer(exitPanGesture)
}
self.sourceViewController.navigationController?.view.addGestureRecognizer(self.exitPanGesture)
只有导航栏手势有效,子视图手势无效。如果我更改此代码的顺序。导航栏手势不起作用,但子视图手势有效。如何向两个视图添加手势?