【发布时间】:2020-02-11 12:32:21
【问题描述】:
我正在尝试使用 RxSwift 检测双击
如果没有 RxSwift,我会是这样的:
private func setupFakePanView() {
let singleTapGesture = UITapGestureRecognizer()
let doubleTapGesture = UITapGestureRecognizer()
singleTapGesture.numberOfTapsRequired = 1
doubleTapGesture.numberOfTapsRequired = 2
singleTapGesture.addTarget(self, action: #selector(self.tapped))
doubleTapGesture.addTarget(self, action: #selector(self.doubleTapped))
someView.addGestureRecognizer(singleTapGesture)
someView.addGestureRecognizer(doubleTapGesture)
singleTapGesture.require(toFail: doubleTapGesture)
}
@objc private func tapped() {
// Do something
}
@objc private func doubleTapped() {
// Do something else
}
有没有办法让 RxSwift、RxCocoa 和 RxGesture 达到同样的效果?我尝试了以下方法,但它当然不起作用:
someView.rx
.tapGesture(numberOfTouchesRequired: 1, numberOfTapsRequired: 1)
.when(.recognized)
.subscribe(onNext: { _ in
// Do something
})
.disposed(by: bag)
someView.rx
.tapGesture(numberOfTouchesRequired: 1, numberOfTapsRequired: 2)
.when(.recognized)
.subscribe(onNext: { _ in
// Do something else
})
.disposed(by: bag)
有没有办法让第一个 tapGesture 知道第二个必须失败?
【问题讨论】:
-
您可以为单击手势设置委托,然后使用
shouldRequireFailureOf方法 -
您是否正在为这些额外的运算符使用库?如果是这样,那是什么?如果不是,那么它们的实现是什么?
-
设置委托不起作用,在这种情况下你将如何实现
shouldRequireFailureOf。您也需要其他手势,对吗? @KishanBhatiya -
是的,哦应该加上:RxGesture。 @DanielT。
标签: ios swift rx-swift rx-cocoa