UITapGestureRecognizer具有可折叠的侧边栏菜单Swift

时间:2016-08-05 03:41:54

标签: ios swift cocoa-touch

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

    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。图片: Home view controller with menu open

1 个答案:

答案 0 :(得分:0)

您可以实施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
        }
    }
}