之前我獲取了很多從網上的圖片,而且都是那種規模的 - 他們可以是大,小等。SDWebImage處理圖像緩存
所以我可以調整它們的大小,當我在顯示它們細胞,但這是低效的。在SDWebImage下載它們並緩存它們的大小後,調整它們的大小會更好,而不是將大圖像存儲在磁盤上併爲每個單元調整大小。
那麼我該如何使用SDWebImage來做到這一點,或者我必須對該類進行一些修改?
之前我獲取了很多從網上的圖片,而且都是那種規模的 - 他們可以是大,小等。SDWebImage處理圖像緩存
所以我可以調整它們的大小,當我在顯示它們細胞,但這是低效的。在SDWebImage下載它們並緩存它們的大小後,調整它們的大小會更好,而不是將大圖像存儲在磁盤上併爲每個單元調整大小。
那麼我該如何使用SDWebImage來做到這一點,或者我必須對該類進行一些修改?
我和你有同樣的問題,並嘗試先調整SDWebImage,但最終建立了自己的組件來解決問題。你可以在這裏看看它:https://github.com/adig/RemoteImageView
SDWebImage開發人員Olivier Poitrey回答了這個問題對我here。
您必須實現SDWebImageManagerDelegate協議,然後將其設置爲共享經理的委託是這樣的:
SDWebImageManager.sharedManager.delegate = self;
using the imageManager:transformDownloadedImage:withURL: instance method.
完全爲我工作。
這真棒!非常感謝你指點我正確的方向。 – kleo
抱歉沒有得到。我爲每個單元格的圖像使用UIImageView + WebCache.h類的sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)佔位符方法。我該怎麼做,你可以用通俗的話來說。 –
SDWebImage 3.8.2
如果使用的UIImageView類sd_setImageWithURL
。我已經創造了另一個的UIImageView類(擴展)
func modifiedImageFromUrl(url: NSURL?) {
self.sd_setImageWithURL(url) { (image, error, cacheType, url) in
if cacheType == SDImageCacheType.None && image != nil {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) {
let modifiedImage = // modify image as you want
dispatch_async(dispatch_get_main_queue()) {
SDWebImageManager.sharedManager().saveImageToCache(modifiedImage, forURL: url)
self.image = modifiedImage
}
}
}
}
}
在斯威夫特3對大師的回答擴展:
myImageView.sd_setImage(with: imageUrl){ (image, error, cacheType, url) in
guard let image = image, cacheType == .none else { return }
DispatchQueue.global(qos: .userInitiated).async {
let modifiedImage = myImageProcessor(image)
SDWebImageManager.shared().saveImage(toCache: modifiedImage, for: imageUrl)
DispatchQueue.main.async {
myImageView.image = modifiedImage
myImageView.setNeedsDisplay()
}
}
}
這是偉大的!圖書館幹得不錯。有一些煩惱,比如在每個reloadData消息上重新加載圖像,或者在每個表滾動中重新出現圖像。你可以看看這個。謝謝,祝賀! – Devfly
感謝您的反饋。如果您在圖像加載時指向動畫序列,則可以使用animate屬性禁用該動畫序列。 – adig
好的,我已經實現了。 – Devfly