使用触控板上的双指滚动识别 UISwipeGestureRecognizer

Recognize UISwipeGestureRecognizer with two-finger scroll on trackpad

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

看来你可以通过新的 属性 allowedScrollTypesMaskUIPanGestureRecognizer 工作,但我还没有看到 UISwipeGestureRecognizer 的东西。

虽然我没有找到使用 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
}

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

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