Я нашел 2 решения для решения этой проблемы!
A. Использование пользовательского UITapGestureRecognizer
let doubleTapGesture = UITapGestureRecognizer()
doubleTapGesture.numberOfTapsRequired = 2
let singleTapGesture = UITapGestureRecognizer()
singleTapGesture.numberOfTapsRequired = 1
singleTapGesture.require(toFail: doubleTapGesture)
let singleTap = someView.rx
.gesture(singleTapGesture)
.when(.recognized)
.subscribe(onNext: { _ in
// Do something
})
.disposed(by: bag)
let doubleTap = someView.rx
.gesture(doubleTapGesture)
.when(.recognized)
.subscribe(onNext: { _ in
// Do something else
})
.disposed(by: bag)
или ..
B. Использование пользовательского UIGestureRecognizerDelegate
Спасибо Кишан за предложение Ответ Джегнукса !
1 - Установить пользовательский делегат для одного жеста касания. .
someView.rx
.tapGesture(
numberOfTouchesRequired: 1,
numberOfTapsRequired: 1,
configuration: { [weak self] gesture, delegate in
gesture.delegate = self
}
)
.subscribe(onNext: { _ in
// Do something
})
.disposed(by: bag)
// double tap same as before
2 - Реализация gestureRecognizer(_:shouldRequireFailureOf:)
extension MyController: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
if let gesture = otherGestureRecognizer as? UITapGestureRecognizer, gesture.numberOfTapsRequired == 2 {
return true
}
return false
}
}
Оба решения работают нормально.