一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
第三方
pod 'Kingfisher', '~> 7.12.0'
效果
使用
UIButton+Kingfisher
该封装是给按键添加一个网络加载图片和加载背景图片的方法,使用起来非常方便
按键图片
// 使用扩展设置网络图片
button.sp.setImage(
urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
for: .normal,
placeholder: UIImage(named: "placeholder")
)
按键背景图片
// 使用扩展设置背景图片
backgroundImageButton.sp.setBackgroundImage(
urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
for: .normal,
placeholder: UIImage(named: "bgPlaceholder"),
progresseCellBack: { receivedSize, totalSize in
print("背景图片下载进度: \(Float(receivedSize)/Float(totalSize))")
},
completionHandler: { result in
switch result {
case .success(let value):
print("背景图片下载完成: \(value.source.url?.absoluteString ?? "")")
case .failure(let error):
print("背景图片下载失败: \(error.localizedDescription)")
}
}
)
UIImageView+Kingfisher
该封装是给图片添加一个网络加载图片的方法,使用起来非常方便
完整用法
// 使用扩展设置网络图片(完整版)
imageView.sp.setImage(
urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
placeholder: UIImage(),
progresseCellBack: { receivedSize, totalSize in
print("图片下载进度: \(Float(receivedSize)/Float(totalSize))")
},
completionHandler: { result in
switch result {
case .success(let value):
print("图片下载完成: \(value.source.url?.absoluteString ?? "")")
case .failure(let error):
print("图片下载失败: \(error.localizedDescription)")
}
}
)
简便用法
// 使用扩展设置网络图片(简化版)
simpleImageView.sp.setImage(
urlStr: "https://img-blog.csdnimg.cn/direct/45e88f5ff36f40e2b580b5644fc0eb7b.jpeg",
placeholder: UIImage()
)
SPWebImage
对Kingfisher的相关设置
import UIKit
import SnapKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
//1. 基本图片下载与显示
let imageView = UIImageView()
let imageUrl = "https://example.com/image.jpg"
// 或者直接使用 SPWebImageDownloader
SPWebImage.downloader.download(urlStr: imageUrl, completionHandler: { result in
switch result {
case .success(let loadingResult):
imageView.image = loadingResult.image
case .failure(let error):
print("下载失败: \(error.localizedDescription)")
// 可以设置占位图或错误图
imageView.image = UIImage(named: "placeholder")
}
})
//2. 带进度回调的图片下载
let imageUrl_0 = "https://example.com/large-image.jpg"
SPWebImage.downloader.download(
urlStr: imageUrl_0,
progressBlock: { receivedSize, totalSize in
let progress = Float(receivedSize) / Float(totalSize)
print("下载进度: \(progress * 100)%")
},
completionHandler: { result in
switch result {
case .success(let loadingResult):
print("图片下载完成,尺寸: \(loadingResult.image.size)")
case .failure(let error):
print("下载失败: \(error.localizedDescription)")
}
}
)
//3. 缓存管理
// 清除内存缓存
SPWebImage.cache.clearMemoryCache()
// 清除磁盘缓存(异步)
SPWebImage.cache.clearDiskCache {
print("磁盘缓存已清除")
}
// 获取缓存大小
SPWebImage.cache.getDiskBytes { size in
let sizeInMB = Double(size) / 1024 / 1024
print("当前磁盘缓存大小: \(String(format: "%.2f", sizeInMB)) MB")
}
// 设置缓存大小限制为 100MB
SPWebImage.cache.setMaxDiskCacheSize(cacheSizeMB: 100)
// 设置缓存过期时间为 7 天
SPWebImage.cache.setMaxCachePeriodInSecond(days: 7)
// 清理过期缓存
SPWebImage.cache.cleanExpiredDiskCache {
print("过期缓存已清理")
}
}
}