【问题标题】:Recognize UISwipeGestureRecognizer with two-finger scroll on trackpad通过触控板上的两指滚动识别 UISwipeGestureRecognizer
【发布时间】:2020-06-07 23:02:35
【问题描述】:

我有一个UISwipeGestureRecognizer 添加到我的视图中,当您用一根手指向下滑动时会识别该UISwipeGestureRecognizer。我希望当您将鼠标悬停在此视图上时用两根手指在触控板上向下滑动时也能识别这一点。这可能吗?

看来您可以通过新属性allowedScrollTypesMask 使UIPanGestureRecognizer 工作,但我还没有看到UISwipeGestureRecognizer 的东西。

【问题讨论】:

    标签: ios uikit uiswipegesturerecognizer trackpad ipados


    【解决方案1】:

    虽然我没有找到使用UISwipeGestureRecognizer 的方法,但我通过添加UIPanGestureRecognizer 解决了这个问题。有几点需要注意。

    您需要允许它通过连续(触控板)和离散(鼠标滚轮)滚动来触发:

    panGestureRecognizer.allowedScrollTypesMask = [.continuous, .discrete]
    

    例如,为了确保它仅在向下滚动时触发,您可以实现此委托方法来检查它们滚动的方向:

    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        if gestureRecognizer == panGestureRecognizer {
            //only support scrolling down to close
            if let view = panGestureRecognizer.view {
                let velocity = panGestureRecognizer.velocity(in: view)
                return velocity.y > velocity.x
            }
        }
        return true
    }
    

    还有一个问题,用手指在显示屏上滑动时会触发平移。您可以通过实现其他委托方法来防止平移手势被直接触摸识别,因此它只能通过触控板/鼠标触发:

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        if gestureRecognizer == panGestureRecognizer {
            return false //disallow touches, only allow trackpad/mouse scroll
        }
        return true
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多