Swift 如何防止在重新加载UICollectionView的数据时调用willDisplay cell:?

Swift 如何防止在重新加载UICollectionView的数据时调用willDisplay cell:?,swift,uicollectionview,uicollectionviewcell,Swift,Uicollectionview,Uicollectionviewcell,我有一个动画被调用在一个细胞快速逃避和缓慢增长。正在willDisplay单元格中执行动画:。我遇到的问题是,每当我从服务器获取更多数据后重新加载数据时,就会在所有可见单元格上调用willDisplay cell:。这会导致所有可见细胞收缩和生长。是否有方法仅对新获取的项调用重新加载数据 当前对动画的调用为 func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell,

我有一个动画被调用在一个细胞快速逃避和缓慢增长。正在willDisplay单元格中执行动画:。我遇到的问题是,每当我从服务器获取更多数据后重新加载数据时,就会在所有可见单元格上调用willDisplay cell:。这会导致所有可见细胞收缩和生长。是否有方法仅对新获取的项调用重新加载数据

当前对动画的调用为

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它们在两个方向上都可以很好地滚动。我们正在寻找一种不带标志的方法,因为这样做需要更高的复杂性。我有这样的东西,现在就留着吧。