当平局手势识别器被称为SomePanGestureRecognizer
时,如何禁用或强制手势识别器在UIScrollView
中失败?如何禁用UIScrollView到平移手势识别器?
gestureRecognizer(_:shouldBeRequiredToFailBy:)
方法需要一个手势识别器参数,而不是一个平移手势识别器,我不知道这是为什么我不能让它工作或因为我犯了一个语法错误。
我有UIScrollView
子类,而用于强制方法失败是在下面的委托:
class CustomScrollView: UIScrollView {
override init(frame: CGRect) {
super.init(frame: frame)
configure()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
configure()
}
private func configure() {
isScrollEnabled = true
showsHorizontalScrollIndicator = false
showsVerticalScrollIndicator = false
isPagingEnabled = true
bounces = false
alwaysBounceVertical = false
alwaysBounceHorizontal = false
}
}
// gesture recognizer delegate
extension CustomScrollView: UIGestureRecognizerDelegate {
// allow simultaneous gestures
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
// force failure
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
// TLDR: disable uiscrollview when SomePanGestureRecognizer is called
}
}
这里是一个需要给力的UIScrollView
手势识别失败泛手势识别:
func addSomePanGestureRecognizer() {
SomePanGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(oneBPanGestureHandler(gesture:)))
oneBHandle.addGestureRecognizer(SomePanGestureRecognizer)
}
UPDATE我将UIPanGestureRecognizer子类化并使用同时委托来工作,但我担心这是一种不稳定的方式,因为我依靠UIKit始终在自定义平移手势之前禁用UIScrollView。
// gesture recognizer delegate
extension CustomScrollView: UIGestureRecognizerDelegate {
// simultaneous gestures
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if otherGestureRecognizer is CustomPanGestureRecognizer {
return false
} else {
return true
}
}
}
更新2这也适用,但我不知道为什么,因为我觉得它不应该。难道不是相反吗?
// force failure
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if otherGestureRecognizer is CustomPanGestureRecognizer {
return true
} else {
return false
}
}
'UIPanGestureRecognizers'是UIGestureRecognizer'的'子类。这不是问题。 – PeejWeej