SDWebImage 5 获取缓存大小&设置缓存路径过滤(swift)

最近升级到SDWebImage5.x,看了看迁移文档api变动还是挺大的,虽然迁移文档写得很详细了,但是并没有具体的举例。这里总结了一下比较常用的两个api的示例

  • 获取缓存大小&清除缓存
    // 获取缓存大小
    fileprivate func getCacheSize(){
        let totalSize = SDImageCache.shared.totalDiskSize()
        let size = CGFloat(totalSize) / 1024.0 / 1024.0
        self.cacheSizeLabel.text = String(format: "%.1f", size) + "M"
    }

    // 清除缓存点击响应
    @IBAction func clearCacheTouched(_ sender: Any) {
        SDWebImageManager.shared.imageCache.clear(with: .disk) {
            self.getCacheSize()
        }
    }
  • 设置缓存路径过滤

    这里主要的应用场景是阿里云oss的图片存储,它会给图片一个签名以防盗图,但是这就会导致即使是同一张图片,每次访问的签名不同会使它的缓存失效。为了解决这个问题我们需要设置缓存路径过滤,在图片按照地址缓存的时候把的签名部分过滤掉。

        let cacheKeyFilter = SDWebImageCacheKeyFilter.init { (url) -> String? in
            if let host = url.host {
                if host.contains("你的服务器地址.oss") {
                    let urlStr = url.absoluteString
                    if let range = urlStr.range(of: "?") {
                        var cacheKey = String(urlStr.prefix(upTo: range.upperBound))
                        if let range = urlStr.range(of: "x-oss-process=") {
                            cacheKey = cacheKey + String(urlStr.suffix(from: range.lowerBound))
                        }
                        printD(cacheKey)
                        return cacheKey
                    }
                }
            }
            return url.absoluteString
        }
        SDWebImageManager.shared.cacheKeyFilter = cacheKeyFilter

如果要支持gif的话还是建议升级到SDWebImage 5.x的,我之前使用的是SDWebImage 4.4.6 它有一个bug,从一个controller push到另一个controller的时候,如果gif的帧数比较高,在页面跳转的动画过程中,gif图片会变白,页面滑动效果结束后才会出现,这样体验非常不好。在SDWebImage 5.x中增加了对gif的支持,不需要再像4.x那样引入SDWebImage/GIF(里面包含FLAnimatedImage)了。

你可能感兴趣的:(SDWebImage 5 获取缓存大小&设置缓存路径过滤(swift))