Iphone SDWebImage在缓存之前处理图像

Iphone SDWebImage在缓存之前处理图像,iphone,ios,cocoa-touch,sdwebimage,Iphone,Ios,Cocoa Touch,Sdwebimage,我从网络上获取了很多图像,它们都有各种大小——它们可以是大的,也可以是小的等等 因此,当我在单元格中显示它们时,我可以调整它们的大小,但这是低效的。更好的方法是在SDWebImage下载并缓存调整大小后调整大小,而不是在磁盘上存储大图像并为每个单元格调整大小 那么,我如何使用SDWebImage做到这一点,或者我必须对类进行一些修改?我遇到了与您相同的问题,并尝试先调整SDWebImage,但最终构建了自己的组件解决了问题。您可以在这里查看它:SDWebImage开发人员Olivier Poit

我从网络上获取了很多图像,它们都有各种大小——它们可以是大的,也可以是小的等等

因此,当我在单元格中显示它们时,我可以调整它们的大小,但这是低效的。更好的方法是在SDWebImage下载并缓存调整大小后调整大小,而不是在磁盘上存储大图像并为每个单元格调整大小


那么,我如何使用SDWebImage做到这一点,或者我必须对类进行一些修改?

我遇到了与您相同的问题,并尝试先调整SDWebImage,但最终构建了自己的组件解决了问题。您可以在这里查看它:

SDWebImage开发人员Olivier Poitrey为我回答了这个问题

您必须实现SDWebImageManagerDelegate协议,然后将其设置为共享管理器的委托,如下所示:

SDWebImageManager.sharedManager.delegate = self;

using the imageManager:transformDownloadedImage:withURL: instance method.

对我来说效果非常好。

SDWebImage 3.8.2

如果使用UIImageView类别
sd\u setImageWithURL
。我已创建另一个UIImageView类别(扩展名)


扩展迈斯卓在《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()
        }
    }
}

这太棒了!在图书馆干得好。有一些烦恼,比如每次重新加载数据消息时都会重新加载图像,或者每次表格滚动时都会重新出现图像。你可以看看这个。谢谢你,祝贺你!谢谢你的反馈。如果你指的是图像加载时的动画序列,你可以使用animate属性禁用它。您可能想看一看。:)这太棒了!非常感谢你为我指明了正确的方向。对不起,我没能理解。我正在为每个单元格的图像使用UIImageView+WebCache.h类的sd_setImageWithURL:(NSURL*)url占位符图像:(UIImage*)占位符方法。我该怎么办,你能用外行的话说吗?@NeerajSonaro myImagePorcessor是任何一个函数,它获取一个图像并返回另一个经过处理的图像。我不认为我需要更新我的答案。“我的…”是一个非常典型的说法,你需要在这里填空……这很好,但是也许你应该指定它是在哪里实现的。
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()
        }
    }
}