我有一个 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
}
还有一个小问题,当你用手指在显示屏上滑动时,平移会被触发。你可以通过实现另外一个委托方法来防止直接触摸时的平移手势被识别,因此它只能通过trackpadmouse来触发。
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if gestureRecognizer == panGestureRecognizer {
return false //disallow touches, only allow trackpad/mouse scroll
}
return true
}