Ячейка представления коллекции RxDataSources всегда использует fade для вставки анимации ячейки, не может перейти на другую анимацию - PullRequest
0 голосов
/ 14 января 2020

У меня проблема с анимацией ячеек, использующей RxSwift на UICollectionView, моя простая настройка выглядит следующим образом:

collectionView.register(UINib(nibName: "CustomCollectionCell", bundle: nil), forCellWithReuseIdentifier: "cell")

let dataSource = RxCollectionViewSectionedAnimatedDataSource<SectionOfCustomDataAnimated>(
    animationConfiguration: AnimationConfiguration(insertAnimation: .bottom, reloadAnimation: .bottom, deleteAnimation: .bottom),
    configureCell: { dataSource, cv, indexPath, element in
        let cell = cv.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionCell
        cell.colorView.backgroundColor = element.color
        return cell
    })

С моделями ячеек и данных, например, так:

struct CustomDataAnimated {
    let id: Int
    let color: UIColor
}

extension CustomDataAnimated: IdentifiableType, Equatable {
    typealias Identity = Int

    var identity: Identity {
        return id
    }
}

struct SectionOfCustomDataAnimated {
    var items: [Item]

    // Need to provide a unique id, only one section in our model
    var identity: Int {
        return 0
    }
}

extension SectionOfCustomDataAnimated: AnimatableSectionModelType {
    typealias Identity = Int
    typealias Item = CustomDataAnimated

    init(original: SectionOfCustomDataAnimated, items: [Item]) {
        self = original
        self.items = items
    }
}

Я использую BehaviourRelay, который обновляется при нажатии кнопки update:

 private let sections = BehaviorRelay<[SectionOfCustomDataAnimated]>(
        value: [SectionOfCustomDataAnimated(items: [
            CustomDataAnimated(id: 0, color: .red),
            CustomDataAnimated(id: 1, color: .yellow)
    ])])

 @IBAction func didTapUpdate(_ sender: Any) {
        let colors: [UIColor] = [.red, .blue, .green, .purple, .orange]
        let originalColors = sections.value.first!.items
        self.sections.accept([SectionOfCustomDataAnimated(items: originalColors + [CustomDataAnimated(id: originalColors.count ,color: colors.randomElement()!)])])
    }

enter image description here

Проблема заключается в что представление коллекции делает анимацию , однако кажется, что всегда использует анимацию в стиле затухания. Выбор другого параметра, например .bottom в приведенном выше примере, по-прежнему приводит к такой же анимации затухания. Я использовал аналогичные логи c в табличном представлении ранее, и не было никаких проблем, у меня, кажется, только проблема в представлениях коллекции. Как заставить работать другой стиль анимации?

1 Ответ

1 голос
/ 14 января 2020

UICollectionView анимации вставки / удаления обрабатываются макетом, поэтому RxCollectionViewSectionedAnimatedDataSource не может сделать это за вас. Например, если вы посмотрите на функции insertRows / insertItems, вы заметите, что для UITableView требуется анимация, а для UICollectionView - нет. То, что вы видите, является анимацией по умолчанию, используемой UICollectionViewFlowLayout, которая является анимацией затухания. Если вам нужно нестандартное поведение, вам нужно создать подкласс макета, и для этого есть множество учебных пособий .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...