滚动时,UICollectionView单元格图像不断变化

时间:2018-03-30 04:46:57

标签: swift uicollectionview

我正在使用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,它也没用。

1 个答案:

答案 0 :(得分:0)

每次加载集合视图单元格时,我认为下载图像数据并不是一个好主意。尝试使用https://github.com/onevcat/Kingfisher下载和缓存图像。您需要下载一次图像,然后图像将被缓存,这意味着下次滚动它将使用缓存的图像,您将不会再遇到此问题。