我从网上获取了很多图片,它们都有不同的尺寸——它们可以很大,也可以很小等等。
因此,当我在单元格中显示它们时,我可以调整它们的大小,但这效率低下。最好在 SDWebImage 下载它们并将它们调整大小后调整它们的大小,而不是将大图像存储在磁盘上并为每个单元调整它们的大小。
那么我如何使用 SDWebImage 来做到这一点,或者我必须对课程进行一些修改?
我从网上获取了很多图片,它们都有不同的尺寸——它们可以很大,也可以很小等等。
因此,当我在单元格中显示它们时,我可以调整它们的大小,但这效率低下。最好在 SDWebImage 下载它们并将它们调整大小后调整它们的大小,而不是将大图像存储在磁盘上并为每个单元调整它们的大小。
那么我如何使用 SDWebImage 来做到这一点,或者我必须对课程进行一些修改?
SDWebImage 开发人员 Olivier Poitrey在这里为我回答了这个问题。
您必须实现 SDWebImageManagerDelegate 协议,然后将其设置为共享管理器的委托,如下所示:
SDWebImageManager.sharedManager.delegate = self;
using the imageManager:transformDownloadedImage:withURL: instance method.
非常适合我。
我和你有同样的问题,并尝试先调整 SDWebImage,但最终构建了我自己的组件来解决问题。你可以在这里看看:https ://github.com/adig/RemoteImageView
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
}
}
}
}
}
扩展 MaeSRo 在Swift 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()
}
}
}