Add the scroll view reactive wrapper for the delegate method scrollViewDidEndDragging(_:willDecelerate:)

This commit is contained in:
Luca Serpico 2016-12-09 12:15:01 +00:00
parent d69c9b1ec4
commit 665d2a164d
2 changed files with 38 additions and 1 deletions

View File

@ -63,6 +63,15 @@ extension Reactive where Base: UIScrollView {
let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidEndDecelerating(_:))).map { _ in }
return ControlEvent(events: source)
}
/// Reactive wrapper for delegate method `scrollViewDidEndDragging(_:willDecelerate:)`
public var didEndDragging: ControlEvent<Bool> {
let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidEndDragging(_:willDecelerate:))).map { value -> Bool in
let willDecelerate = value[1] as! Bool
return willDecelerate
}
return ControlEvent(events: source)
}
/// Reactive wrapper for delegate method `scrollViewDidZoom`
public var didZoom: ControlEvent<Void> {

View File

@ -14,6 +14,7 @@ import RxSwift
import RxCocoa
import UIKit
import XCTest
import RxTest
class UIScrollViewTests : RxTest {}
@ -86,7 +87,34 @@ extension UIScrollViewTests {
XCTAssertTrue(completed)
}
func testScrollViewDidEndDragging() {
let scheduler = TestScheduler(initialClock: 0)
let results = scheduler.createObserver(Bool.self)
autoreleasepool {
let scrollView = UIScrollView()
let o = scheduler.createHotObservable([
next(250, false),
next(300, true),
])
let subscription: Disposable! = scrollView.rx.didEndDragging.subscribe(results)
_ = scheduler.start {
o.do(onNext: {
scrollView.delegate!.scrollViewDidEndDragging!(scrollView, willDecelerate: $0)
}, onDispose: {
subscription.dispose()
})
}
}
XCTAssertEqual(results.events, [
next(250, false),
next(300, true)
])
}
func testScrollViewContentOffset() {
var completed = false