Swift 如何防止在重新加载UICollectionView的数据时调用willDisplay cell:?
我有一个动画被调用在一个细胞快速逃避和缓慢增长。正在willDisplay单元格中执行动画:。我遇到的问题是,每当我从服务器获取更多数据后重新加载数据时,就会在所有可见单元格上调用willDisplay cell:。这会导致所有可见细胞收缩和生长。是否有方法仅对新获取的项调用重新加载数据 当前对动画的调用为Swift 如何防止在重新加载UICollectionView的数据时调用willDisplay cell:?,swift,uicollectionview,uicollectionviewcell,Swift,Uicollectionview,Uicollectionviewcell,我有一个动画被调用在一个细胞快速逃避和缓慢增长。正在willDisplay单元格中执行动画:。我遇到的问题是,每当我从服务器获取更多数据后重新加载数据时,就会在所有可见单元格上调用willDisplay cell:。这会导致所有可见细胞收缩和生长。是否有方法仅对新获取的项调用重新加载数据 当前对动画的调用为 func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell,
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)
}
}
如果有人有一种不用旗子的方法,请告诉我。旗帜会使事情变得混乱并引发战争。你可以试试
var shouldAnimate = false
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if shouldAnimate {
(cell as! AnimatedView).shrinkAndGrow(toScale: STANDARD_SHRINK_SCALE, withDuration: STANDARD_GROW_DURATION)
}
}
第一次重新加载后,change shouldAnimate由于滚动集合视图而出现/重新出现的单元格如何?@rmaddy它们在两个方向上都可以很好地滚动。我们正在寻找一种不带标志的方法,因为这样做需要更高的复杂性。我有这样的东西,现在就留着吧。