【问题标题】:How can I dismiss my slide menu while tapping outside?在外面点击时如何关闭我的幻灯片菜单?
【发布时间】:2019-06-05 09:07:01
【问题描述】:

我有一个从网站滑入的汉堡菜单。每次我选择一个单元格时它都会关闭菜单。我想添加一个 TapRecognizer,这样当你在外面点击时它也会关闭它。

var isPresenting = true
let dimmingView = UIView()

func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
    return 1.0
}

点击外面应该关闭菜单

【问题讨论】:

    标签: swift


    【解决方案1】:

    将点击手势委托分配给您的视图控制器。在手势方法中保留代码以关闭菜单。下面的代表允许手势仅在菜单外触摸时才接收触摸,并且如果它来自菜单内部则不会关闭。

    @objc private func tapGesture(_ gesture: UIGestureRecognizer) {
            self.closeMenu()
        }
    
    extension SharePathViewController: UIGestureRecognizerDelegate {
    
        func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
            let point = touch.location(in: view)
            return !menuView.frame.contains(point)
        }
    
    }
    

    【讨论】:

    • 我现在尝试了一些东西,但没有真正奏效..我的 menuViewController 没有做任何事情
    【解决方案2】:

    你只需要将UITapGestureRecognizer添加到父视图

    然后点击使用func location(in: UIView?) -> CGPoint并检查触摸是否在滑动菜单的框架之外。

    @IBAction func touchWasDetected(_ sender: UITapGestureRecognizer) {
        let touchPoint = sender.location(in: view)
        if !slideView.frame.contains(touchPoint) {
            dissmiss()
        }
    }
    

    方法的连接手势动作

    【讨论】:

    • IBAction 来自哪里?
    • 我通过从父视图上的 UITapGestrueRecognize 的情节提要实例中拖放来创建方法。
    • 对不起,我不明白。我不知道该怎么做。
    • This 是我的 HomeViewController。我不能在外面点击时只使用 touchesBegan(_:with:) 方法来关闭侧边菜单吗?
    • 我只是编辑我的答案,抱歉我现在没有时间检查你的代码。
    猜你喜欢
    • 2020-02-29
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多