0

由于Kingfisher介绍LocalFileImageDataProvider5.0. 我决定切换到Kingfisher从我的磁盘加载图像,而不是直接加载它们。正如他们所说,

// Compared to loading it directly, 
// you can get benefit of using Kingfisher's extension methods, 
// as well as applying `ImageProcessor`s and storing the image to `ImageCache` of Kingfisher.

它工作得很好。因为我来自磁盘的图像非常大(每个超过 1MB)。


所以问题是如果我使用DownsamplingImageProcessorin调整图像大小UICollectionView's Cell,我是否仍然能够访问“图像的详细信息”页面中的原始大小图像以显示全分辨率图像,仍然像这样使用

//The way loading image from "Image detail page"
let url = URL(fileURLWithPath: path)
let provider = LocalFileImageDataProvider(fileURL: url)
imageView.kf.setImage(with: provider)

所以在“UICollectionView 页面”我可以这样使用它,

let url = URL(fileURLWithPath: path)
let provider = LocalFileImageDataProvider(fileURL: url)
let processor = DownsamplingImageProcessor(size: size)
imageView.kf.setImage(with: provider, options: [.processor(processor)])

那么他们是在Kingfisher缓存机制中缓存了不同的图片缓存吗?因为他们似乎cacheKeyLocalFileImageDataProvider.

public init(fileURL: URL, cacheKey: String? = nil) {
  self.fileURL = fileURL
  self.cacheKey = cacheKey ?? fileURL.absoluteString
}

我是否需要cacheKey为这两个不同的页面自定义?

4

1 回答 1

1

您不需要使用不同的缓存键。有processor一个标识符,当存储在缓存中时,它将用于计算最终的缓存键。所以一切对你来说都应该没问题(作为你的代码片段)。

您可以在图像设置方法完成处理程序中打印出图像大小以确认您正在加载的图像。

imageView.kf.setImage(with: url) { result in
    switch result {
    case .success(let value):
        // The image was set to image view:
        print(value.image.size)
    //...

于 2019-02-14T06:50:14.457 回答