У меня есть анимация, вызываемая на клетку (чтобы быстро уклоняться и медленно расти). Анимация выполняется в willDisplay cell:
. У меня проблема в том, что всякий раз, когда я перезагружаю данные после получения большего количества данных с сервера, будет отображаться ячейка willDisplay: для всех видимых ячеек. Это заставляет все видимые клетки сжиматься и расти. Есть ли способ вызвать данные перезагрузки только для вновь полученных элементов?
Текущий вызов анимации:
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if collectionView.isDragging {
(cell as! AnimatedView).shrinkAndGrow(toScale: STANDARD_SHRINK_SCALE, withDuration: STANDARD_GROW_DURATION)
}
}
Мой текущий обходной путь
extension UICollectionView {
func reloadData(completion: @escaping () -> ()) {
UIView.animate(withDuration: 0, animations: { self.reloadData()})
{_ in completion() }
}
}
В методе извлечения
DispatchQueue.main.async { [weak self] in
self?.orders.append(contentsOf: orders)
self?.shouldAnimate = false
self?.collectionView.reloadData { [weak self] in
self?.shouldAnimate = true
}
}
Как я справляюсь
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if shouldAnimate, collectionView.isDragging {
(cell as! AnimatedView).shrinkAndGrow(toScale: STANDARD_SHRINK_SCALE, withDuration: STANDARD_GROW_DURATION)
}
}
Если у кого-то есть способ сделать это без использования флага, пожалуйста, дайте мне знать. Флаги, мешающие вещам, вызывают войны.