繁体   English   中英

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

[英]Recognize UISwipeGestureRecognizer with two-finger scroll on trackpad

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

看来您可以通过新属性allowedScrollTypesMask使UIPanGestureRecognizer工作,但我还没有看到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
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM