9

我从网上获取了很多图片,它们都有不同的尺寸——它们可以很大,也可以很小等等。

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

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

4

4 回答 4

25

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

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

SDWebImageManager.sharedManager.delegate = self;

using the imageManager:transformDownloadedImage:withURL: instance method.

更多信息。

非常适合我。

于 2013-03-13T18:25:01.803 回答
4

我和你有同样的问题,并尝试先调整 SDWebImage,但最终构建了我自己的组件来解决问题。你可以在这里看看:https ://github.com/adig/RemoteImageView

于 2012-10-17T07:21:34.780 回答
0

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
                }
            }
        }
    }
}
于 2016-10-17T15:27:39.403 回答
0

扩展 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()
        }
    }
}
于 2017-02-08T22:58:26.820 回答