RxGesture에서 View와 SubView가 동시에 인식되지 않도록 하는 방법
Posted on 2021-12-08 by GKSRUDTN99
Swift&Xcode
Swift
RxGesture
RxSwift
-
View안에 작은 SubView가 그려진다고 할 때, 두 View에 모두
view.rx.tapGesture().when(.recognized)
와 같은 방식으로 input binding을 했다면, subview를 터치하였을 때 superview와 subview 모두가 control Event를 방출한다. 이를 방지하기 위한 방법이 있다. -
input binding을 다음과 같이 변경한다.
func bindInput() {
superView.rx.tapGesture(configuration: { gesture, delegate in
delegate.simultaneousRecognitionPolicy = .never
}).when(.recognized)
.bind(...)
subView.rx.tapGesture(configuration: { gesture, delegate in
delegate.simultaneousRecognitionPolicy = .never
}).when(.recognized)
.bind(...)
}
- 위와 같이 작성하면, 두 개의 View 모두가 ControlEvent를 방출하는 일은 없다.
- 또는 Extension으로 다음과 같이 작성하는 방법도 있다.
extension Reactive where Base: RxGestureView {
public func tapGestureOnTop() -> TapControlEvent {
return self.tapGesture { gesture, delegate in
delegate.simultaneousRecognitionPolicy = .never
}
}
}
// subView.rx.tapGestureOnTop().when(.recognized)...
Anonymous March 11, 2023, 10:43 p.m.
저도 동일한 상황이었는데 보고 참고하여 문제 해결하고 갑니다. 좋은 코드 보여주셔서 감사합니다!!