mirror of
https://github.com/ReactiveX/RxSwift.git
synced 2024-10-05 06:27:29 +03:00
Merge branch 'feature/scrollviewdelegatemethods' of https://github.com/AndrewSB/RxSwift into AndrewSB-feature/scrollviewdelegatemethods
This commit is contained in:
commit
22da0a6493
@ -5,6 +5,8 @@ All notable changes to this project will be documented in this file.
|
||||
|
||||
## Master
|
||||
|
||||
* Adds `didScroll` and `didZoom` `ControlEvent`s to `UIScrollView+Rx`
|
||||
|
||||
## [3.0.1](https://github.com/ReactiveX/RxSwift/releases/tag/3.0.1) (Xcode 8 / Swift 3.0 compatible)
|
||||
|
||||
#### Anomalies
|
||||
|
@ -52,6 +52,25 @@ extension Reactive where Base: UIScrollView {
|
||||
}
|
||||
}
|
||||
|
||||
/// Reactive wrapper for delegate method `scrollViewDidScroll`
|
||||
public var didScroll: ControlEvent<Void> {
|
||||
let source = RxScrollViewDelegateProxy.proxyForObject(base).contentOffsetSubject.map { _ in () }
|
||||
return ControlEvent(events: source)
|
||||
}
|
||||
|
||||
/// Reactive wrapper for delegate method `scrollViewDidZoom`
|
||||
public var didZoom: ControlEvent<Void> {
|
||||
let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidZoom)).map { _ in }
|
||||
return ControlEvent(events: source)
|
||||
}
|
||||
|
||||
|
||||
/// Reactive wrapper for delegate method `scrollViewDidScrollToTop`
|
||||
public var didScrollToTop: ControlEvent<Void> {
|
||||
let source = delegate.methodInvoked(#selector(UIScrollViewDelegate.scrollViewDidScrollToTop(_:))).map { _ in }
|
||||
return ControlEvent(events: source)
|
||||
}
|
||||
|
||||
/// Installs delegate as forwarding delegate on `delegate`.
|
||||
/// Delegate won't be retained.
|
||||
///
|
||||
|
@ -15,14 +15,14 @@ import RxCocoa
|
||||
import UIKit
|
||||
import XCTest
|
||||
|
||||
class UIScrollViewTests : RxTest {
|
||||
}
|
||||
class UIScrollViewTests : RxTest {}
|
||||
|
||||
extension UIScrollViewTests {
|
||||
|
||||
func testScrollEnabled_False() {
|
||||
let scrollView = UIScrollView(frame: CGRect.zero)
|
||||
let scrollView = UIScrollView()
|
||||
scrollView.isScrollEnabled = true
|
||||
|
||||
Observable.just(false).bindTo(scrollView.rx.isScrollEnabled).dispose()
|
||||
XCTAssertTrue(scrollView.isScrollEnabled == false)
|
||||
}
|
||||
@ -30,6 +30,7 @@ extension UIScrollViewTests {
|
||||
func testScrollEnabled_True() {
|
||||
let scrollView = UIScrollView(frame: CGRect.zero)
|
||||
scrollView.isScrollEnabled = false
|
||||
|
||||
Observable.just(true).bindTo(scrollView.rx.isScrollEnabled).dispose()
|
||||
XCTAssertTrue(scrollView.isScrollEnabled == true)
|
||||
}
|
||||
@ -38,20 +39,60 @@ extension UIScrollViewTests {
|
||||
let createView: () -> UIScrollView = { UIScrollView(frame: CGRect(x: 0, y: 0, width: 1, height: 1)) }
|
||||
ensurePropertyDeallocated(createView, CGPoint(x: 1, y: 1)) { (view: UIScrollView) in view.rx.contentOffset }
|
||||
}
|
||||
|
||||
func testScrollViewDidScroll() {
|
||||
let scrollView = UIScrollView()
|
||||
var didScroll = false
|
||||
|
||||
let subscription = scrollView.rx.didScroll.subscribe(onNext: {
|
||||
didScroll = true
|
||||
})
|
||||
|
||||
scrollView.delegate!.scrollViewDidScroll!(scrollView)
|
||||
|
||||
XCTAssertTrue(didScroll)
|
||||
subscription.dispose()
|
||||
}
|
||||
|
||||
func testScrollViewDidZoom() {
|
||||
let scrollView = UIScrollView()
|
||||
var didZoom = false
|
||||
|
||||
let subscription = scrollView.rx.didZoom.subscribe(onNext: {
|
||||
didZoom = true
|
||||
})
|
||||
|
||||
scrollView.delegate!.scrollViewDidZoom!(scrollView)
|
||||
|
||||
XCTAssertTrue(didZoom)
|
||||
subscription.dispose()
|
||||
}
|
||||
|
||||
func testScrollToTop() {
|
||||
let scrollView = UIScrollView()
|
||||
var didScrollToTop = false
|
||||
|
||||
let subscription = scrollView.rx.didScrollToTop.subscribe(onNext: {
|
||||
didScrollToTop = true
|
||||
})
|
||||
|
||||
scrollView.delegate!.scrollViewDidScrollToTop!(scrollView)
|
||||
|
||||
XCTAssertTrue(didScrollToTop)
|
||||
subscription.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
@objc class MockScrollViewDelegate
|
||||
: NSObject
|
||||
, UIScrollViewDelegate {
|
||||
|
||||
}
|
||||
, UIScrollViewDelegate {}
|
||||
|
||||
extension UIScrollViewTests {
|
||||
func testSetDelegateUsesWeakReference() {
|
||||
let scrollView = UIScrollView()
|
||||
|
||||
var delegateDeallocated = false
|
||||
|
||||
let scrollView = UIScrollView(frame: CGRect.zero)
|
||||
autoreleasepool {
|
||||
let delegate = MockScrollViewDelegate()
|
||||
_ = scrollView.rx.setDelegate(delegate)
|
||||
|
Loading…
Reference in New Issue
Block a user