How to create Observable which streams an event repeatedly while a button holds down?
Even I was looking for a solution for your question. I got help from RxSwift slack channel.
let button = submitButton.rx_controlEvent([.TouchDown])
button
.flatMapLatest { _ in
Observable<Int64>.interval(0.1, scheduler: MainScheduler.instance)
.takeUntil(self.submitButton.rx_controlEvent([.TouchUpInside]))
}
.subscribeNext{ x in print("BOOM \(x)") }
.addDisposableTo(disposeBag)
//prints BOOM 0 BOOM 1 BOOM 2 BOOM 3 BOOM 4 BOOM 5 for every 0.1 seconds
And also Check Interval Documentation.Thanks to @jari of RxSwift slack channel.
To continue on rootcoder response, I had a situation where I had to recognize one longpress greater than three seconds
let signinLongpress = signinButton.rx.controlEvent([.touchDown])
signinLongpress
.flatMapLatest { _ in
Observable<Int64>.interval(3, scheduler: MainScheduler.instance)
.take(1)
}
.subscribe(onNext:{ _ in print("do fun stuff only once when longpress detected")})
.disposed(by: disposeBag)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With