如何在 RxSwift 中为整个应用程序中的单元格和按钮设置动画?

Posted

技术标签:

【中文标题】如何在 RxSwift 中为整个应用程序中的单元格和按钮设置动画?【英文标题】:How to animate cells and buttons throughout the app in RxSwift? 【发布时间】:2019-06-03 11:45:47 【问题描述】:

我想在我的应用程序中的每个按钮和单元格上制作点击动画,基本上是所有带有动作的视图。每次点击时,我都想要一个灰色的闪烁。

问题如下:我为按钮创建了一个自定义类,整个应用程序的按钮工作正常。问题出在单元格上,因为我尝试制作类似 rx 的动画。我在这里和那里都有 UITableView 单元格以及 UICollectionView 单元格和一些视图,所以我尝试做 UIView 扩展来识别水龙头,如果有一个 - 播放动画。我尝试通过扩展来做到这一点:

import UIKit
import RxSwift

extension UIView 
    func makeSelectionIndicatable(forInitialBackgroundColor color: UIColor) 
        let tapGesture = UILongPressGestureRecognizer()
        tapGesture.minimumPressDuration = 0
        tapGesture.cancelsTouchesInView = false
        addGestureRecognizer(tapGesture)

        tapGesture.rx.event.bind(onNext:  [weak self] recognizer in
            if recognizer.state == .began 
                self?.backgroundColor = .global(color: .athens_gray)
            
            if recognizer.state == .ended 
                self?.backgroundColor = color
            
            if recognizer.state == .cancelled 
                self?.backgroundColor = color
            
        )
    

显然有一个 dispose 丢失,但如果我在扩展中添加一个 - 没有任何效果。我的问题是:如何制作类似于 rx 的动画,以便它们在应用程序中可见?也许我想多了,有更简单的方法吗?提前谢谢

【问题讨论】:

【参考方案1】:

我可以推荐RxDataSources

data.bind(to: tableView.rx.items(cellIdentifier: "Cell"))  index, model, cell in
  cell.textLabel?.text = model

RxDataSources 提供了两种特殊的数据源类型,它们自动处理绑定数据源中的动画更改:RxTableViewSectionedAnimatedDataSource 和 RxCollectionViewSectionedAnimatedDataSource

【讨论】:

以上是关于如何在 RxSwift 中为整个应用程序中的单元格和按钮设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何动画从表格视图(rxswift)中删除单元格?

RxSwift + UITableViewCell 如何在 heightForRowAt 中获取单元格对象

如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?

我应该如何访问有关用于使用RxSwift和MVVM填充表格视图的数组的数据

如何使用 MVVM 和 RxSwift 编辑/删除 UICollectionView 单元格

使用 RxSwift 异步加载 UITableView 单元格