gpt4 book ai didi

swift - 使用 KingFisher 使用自定义 Collection View 单元发出缓存图像

转载 作者:行者123 更新时间:2023-11-30 12:19:47 24 4
gpt4 key购买 nike

我正在使用 Kingfisher 缓存存储在 Firebase 中的图像。我正在通过对 Firebase 的 url 调用来检索图像,然后尝试缓存该图像以供重复使用。 configureCell(with video:Video) 中的以下逻辑之前位于 cellForItemAt 中,并且图像缓存工作得很好。但是,将此逻辑移至自定义单元并从 cellForItemAt 调用此函数后,不会通过缓存检索图像。每个图像都会被下载,如果它重新出现在 Collection View 中,则重新下载。我的代码如下。感谢您提前提供的帮助。

class ProminentVideoCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var descriptionLabel: UILabel!
@IBOutlet weak var timeLabel: UILabel!

func configureCell(with video:Video) {
self.timeLabel.text = video.date?.getElapsedInterval()
let thumbnailImageView = UIImageView()
ImageCache.default.retrieveImage(forKey: video.thumbnailurl!, options: nil) {
image, cacheType in
if let image = image {
//Video thumbnail exists in cache--set it
thumbnailImageView.image = image
self.backgroundView = thumbnailImageView
print("Get image \(image), cacheType: \(cacheType).")

} else {
//Video thumbnail does NOT exist in cache, download it
video.downloadThumbnailFromStorage(with: { (url) in
let resource = ImageResource(downloadURL: url, cacheKey: video.thumbnailurl!)
let processor = BlurImageProcessor(blurRadius: 40.0) >> RoundCornerImageProcessor(cornerRadius: 20)

thumbnailImageView.kf.setImage(with: resource, options: [.processor(processor)])
self.backgroundView = thumbnailImageView
})


}
}
}

在我的 View Controller 中:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let currentVideo = self.selectedVideosArray.object(at: indexPath.row) as! Video
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ProminentVideoCollectionViewCell
cell.configureCell(with: currentVideo)
return cell
}

最佳答案

我添加了以下代码以确保缓存机制正常工作。不完全确定为什么 thumbnailImageView.kf.setImage 没有缓存图像,但添加以下代码可以解决问题。

//Video thumbnail does NOT exist in cache, download it
video.downloadThumbnailFromStorage(with: { (url) in
let resource = ImageResource(downloadURL: url, cacheKey: video.thumbnailurl!)
let processor = BlurImageProcessor(blurRadius: 40.0) >> RoundCornerImageProcessor(cornerRadius: 20)

thumbnailImageView.kf.setImage(with: resource, options: [.processor(processor)], completionHandler: { (image, error, cacheType, url) in
ImageCache.default.store(image!, forKey: video.thumbnailurl!)
self.backgroundView = thumbnailImageView
})
})

关于swift - 使用 KingFisher 使用自定义 Collection View 单元发出缓存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44938652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com