【发布时间】:2020-02-01 20:10:21
【问题描述】:
我的应用中有一个集合视图,当有新内容或删除时,它会以动画形式刷新。但是,我不希望它在用户滚动时刷新,因为它会导致抽搐。我只想在用户完成滚动/不滚动时刷新集合视图。
所以我有一个数据源驱动程序,我尝试使用filter 让它等到它变成真的但没有运气。
这是我传递给ViewModel的滚动驱动程序
let isScrollViewScrollingDriver = Observable.merge(
gridCollectionView.rx.willBeginDragging.map { _ in true },
gridCollectionView.rx.didEndDragging.map { _ in false }
).asDriver(onErrorJustReturn: false).startWith(false).distinctUntilChanged()
我在视图控制器中的 ViewModel 初始化
viewModel = ViewModel(
photoLibraryService: PhotoLibraryService.shared,
isGridViewScrolling: isScrollViewScrollingDriver,
disposeBag: disposeBag
)
我的视图模型
let assetDriver = photoLibraryService.albumDriver.asObservable()
.withLatestFrom(
isGridViewScrolling.asObservable().filter { $0 == false }
) { (arg0, arg1) in
return arg0
}.flatMapLatest { libraryAlbum -> Observable<[LibraryAsset]> in
return photoLibraryService.convert(album: libraryAlbum)
}.asDriver(onErrorJustReturn: []).startWith([]).distinctUntilChanged()
然后我将assetDriver 映射到驱动我的集合视图的dataSourceDriver。
我可以对assetDriver 进行哪些更改以使其等待isGridViewScrolling 变为false?谢谢。
【问题讨论】:
-
试试我几年前在 .NET 中提供的这个答案。没有使用 rx-swift 所以一些运营商可能有不同的名字,但我认为它可以满足你的需要:stackoverflow.com/questions/23431018/…
-
谢谢!!我会试着把它翻译回 Swift 看看它是否有效!
标签: ios swift system.reactive rx-swift rx-cocoa