我的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一样,但我不想多次调用重新加载。
感谢您对此问题感兴趣。任何想法都将非常感激!
答案 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])
}
}
}
}