UIMapGestureRecognizer与可折叠侧边栏菜单Swift



我目前正在编程一个应用程序,该应用程序包含一个主屏幕视图控制器和一个侧边栏菜单视图,该视图在加载主屏幕时实例化,并在单击汉堡图标时打开。我正在尝试实现这样一个功能,即在菜单打开时单击菜单外部会关闭菜单,并将正常功能恢复到主视图,而主视图在打开菜单时被禁用。我在viewDidLoad()中实例化了一个UITapGestureRecognizer,以检测用户何时点击主视图。

    let tapRecognizer:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(HomeViewController.handleTap(_:)))
    self.tableView.addGestureRecognizer(tapRecognizer)

下面是实现:

func handleTap(sender: UITapGestureRecognizer) {
    if menu.isMenuOpen {
        menu.showMenu(false)
        self.tableView.allowsSelection = false
    }
}

但是,点击菜单会关闭菜单,就像点击菜单外一样。此外,因为敲击手势识别器只识别特定的敲击,所以主屏幕上的所有内容都会被禁用。我在iOS 9.3上运行XCode 7.3。图片:带有菜单打开的主视图控制器

您可以实现UIGestureRecognizerDelegate并设置tapRecognizer.delegate = self

然后执行以下方法

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    if (gestureRecognizer == tapRecognizer){
    let point = touch.locationInView(self.view)
        if CGRectContainsPoint(menuView.frame, point) == true {
            return false
        }
    }
}

最新更新