1、從網絡上緩存圖片
/// 緩存單張圖片
///
/// - Parameters:
/// - list: 模型
/// - finished: 刷新數據回調
private func cacheSingleImage(list: [RevanstatusModel], finished: @escaping (_ isSuccess: Bool, _ shouldRefresh: Bool)->()) {
/// 0.創建調度組
let group = DispatchGroup()
/// 記錄下載圖片大小
var length = 0
//遍歷數組,查找微博數據中有單張圖片的,進行緩存
for vm in list {
/// 1.判斷圖像數量
if vm.picURLs?.count != 1 {
continue
}
/// 2.代碼執行到這里,數組中有且只有一張圖片
guard let pic = vm.picURLs?[0].thumbnail_pic,let url = URL(string: pic) else {
continue
}
print("要緩存的 URL 是\(url)")
// A> 入組
group.enter()
// 3> 下載圖像
// 1.downloadImage 是 SDWebImage 的核心方法
// 2.圖像下載完成之后,會自動保存在沙盒中,文件路徑是 URL 的 md5
// 3.如果沙盒中已經存在緩存的圖像,后續使用 SD 通過 URL 加載圖像,都會加載本地沙盒地圖像
// 4.不會發起網絡請求,同時,回調方法同樣會調用
// 5.方法還是同樣的方法,調用還是同樣的調用,不過內部不會再次發起網絡請求
//***** 注意點:如果要緩存的圖像累計太大,要找后臺要接口
SDWebImageManager.shared().downloadImage(with: url, options: [], progress: nil, completed: { (image, _, _, _, _) in
/// 將圖像轉換成二進制數據
if let image = image, let data = UIImagePNGRepresentation(image) {
// NSData 是 length 屬性
length += data.count
print("緩存圖像是\(image) 長度 \(length)")
/// 更新單張圖像的尺寸
vm.updateSingleImageSize(image: image)
// B>出組 - 放在回調的最后一句
group.leave()
}
})
}
// C> 監聽調度組情況
group.notify(queue: DispatchQueue.main) {
print("圖像緩存完成\(length / 1024)K")
///目的:在緩存單張圖片成功之后,在進行刷新表格
finished(true, true)
}
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。