【问题标题】:Kingfisher load cache imageKingfisher 加载缓存图像
【发布时间】:2019-01-09 23:09:59
【问题描述】:

我的 API 返回 2 种类型的照片:小和大

我使用 kingfisher 加载照片,我总是先加载小照片。当我加载大照片时,我想实现这一点

if hasCacheSmallPhoto {
  imageView.kf.setImage(with: bigImageUrl, placeholder: cacheImage)
} else {
  imageView.kf.setImage(with: bigImageUrl, placeholder: defaultPlaceHolderImage)
}

如何使用 kingfisher 正确实现这一目标

【问题讨论】:

    标签: ios swift kingfisher


    【解决方案1】:

    您需要先检查小图是否被 kingFisher Cache 缓存。

        if ImageCache.default.isCached(forKey:smallImageUrl) {
    
         ImageCache.default.retrieveImage(forKey: smallImageUrl) { result in
        switch result {
        case .success(let value):
    
           imageView.kf.setImage(with: bigImageUrl, placeholder: value.image)
    
        case .failure(let error):
            print(error)
        }
    }   
    }
    else {
         imageView.image = defaultPlaceHolderImage
         imageView.kf.setImage(with: smallImageUrl) { result in
        // `result` is either a `.success(RetrieveImageResult)` or a `.failure(KingfisherError)`
        switch result {
        case .success(let value):
            // The image was set to image view:
            imageView.kf.setImage(with: bigImageUrl, placeholder: value.image)
    
    
            // The source object which contains information like `url`.
            print(value.source)
    
        case .failure(let error):
            print(error) // The error happens
        }
    }
    }
    

    【讨论】:

    • 如果我没记错的话你想先显示小图,当大图下载成功后你想用大图替换小图对吗?
    • 是的,就是缓存图片的权利。因为我之前下载过,所以应该缓存同一个url
    • 我已经更新了我的答案,请检查它可能对你有帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2017-10-18
    • 1970-01-01
    • 2015-12-02
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多