最近升级到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)了。











网友评论