UICollectionView加载图像无法获得正确的单元格swift 3

时间:2016-12-14 21:44:37

标签: ios asynchronous uicollectionview swift3 custom-cell

我的UICollectionView正在cellForItemAt中提取图片。升级到swift 3后,当我滚动得非常快时,一些图像没有显示。这是cellForItemAt中的代码:

if (imageNotInCache) {
    DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
    if let thumb = imageFromPathAndCacheIt(path) {
      DispatchQueue.main.async {
          let updateCell = collectionView.cellForItem(at: indexPath) as! MyCustomCell? {
             updateCell.imageView.image = thumb
          }
   }
}

问题是,有时我会updateCell为零,即使它在屏幕上(可能是因为滚动到快)。

我知道我们可以在添加图片后添加reloadData,就像:Swift 3: Caching images in a collectionView一样,但我不想多次调用重新加载。

感谢您对此问题感兴趣。任何想法都将非常感激!

1 个答案:

答案 0 :(得分:1)

在访问和手动更新单元格视图内容以及在您可以尝试的整个集合视图上调用reloadData之间肯定存在折衷。

您可以使用func reloadItems(at: [IndexPath])UICollectionView重新加载单个单元格(如果它在屏幕上)。

据推测,imageNotInCache表示您将image存储在内存缓存中,因此只要image也可以访问func collectionView(UICollectionView, cellForItemAt: IndexPath), “只是工作”:

if (imageNotInCache) {
    DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
        if let thumb = imageFromPathAndCacheIt(path) {
            DispatchQueue.main.async {
                self.collectionView.reloadItems(at: [indexPath])
            }
        }
    }
}