UISwipeGestureRecognizer
当您用一根手指向下滑动时,我的视图中添加了一个可以识别的视图。我希望当您将鼠标悬停在此视图上时用两根手指在触控板上向下滑动时也能识别这一点。这可能吗?
看来您可以UIPanGestureRecognizer
通过新属性进行工作,allowedScrollTypesMask
但我还没有看到UISwipeGestureRecognizer
.
UISwipeGestureRecognizer
当您用一根手指向下滑动时,我的视图中添加了一个可以识别的视图。我希望当您将鼠标悬停在此视图上时用两根手指在触控板上向下滑动时也能识别这一点。这可能吗?
看来您可以UIPanGestureRecognizer
通过新属性进行工作,allowedScrollTypesMask
但我还没有看到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
}