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