我正在使用 CollectionView 显示 gif 和 png 格式的图像。所有 gif 图像都正确加载,但是当我滚动 CollectionView 时,png 图像不断被其他 gif 图像替换。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "StickerCell", for: indexPath)as! StickerCell
let stickerString = String(describing: self.stickerArray[indexPath.row])
if (stickerString.hasSuffix(".gif")){
let url = self.stickerArray[indexPath.row]
if let data = try? Data(contentsOf: url){
let image = UIImage()
image.setGifFromData(data, levelOfIntegrity: 0.5)
cell.sticker.setGifImage(image)
}
} else {
let url = self.stickerArray[indexPath.row]
if let data = try? Data(contentsOf: url){
let image: UIImage = UIImage(data: data)!
cell.sticker.image = image
}
}
return cell
}
我也尝试过使用 DispatchQueue.main.async,它也不起作用。
最佳答案
我认为每次加载 Collection View 单元格时都下载图像数据不是一个好主意。尝试使用https://github.com/onevcat/Kingfisher用于下载和缓存图像。您需要下载一次图像,然后图像将被缓存,这意味着下次您滚动时它将使用缓存的图像,并且您将不会再遇到此问题。
关于swift - UICollectionView 单元格图像在滚动时不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49568507/