2012-10-17 7 views
9

hole ich viele Bilder aus dem Internet, und sie sind alle Art von Größen - sie können groß, klein etc sein ..SDWebImage Prozessbilder vor Caching

So kann ich die Größe ändern, wenn ich sie in der Anzeige Zelle, aber das ist ineffizient. Es ist viel besser, die Größe zu ändern, nachdem SDWebImage sie heruntergeladen und in ihrer Größe zwischengespeichert hat, anstatt große Bilder auf der Festplatte zu speichern und die Größe für jede Zelle zu ändern.

Also, wie kann ich das mit SDWebImage machen, oder muss ich ein bisschen auf die Klasse hacken?

Antwort

4

Ich hatte das selbe Problem wie Sie, und versuchte zuerst SDWebImage zu optimieren, aber am Ende baute ich meine eigene Komponente, die das Problem löste. Sie können es sich hier ansehen: https://github.com/adig/RemoteImageView

+0

Das ist großartig! Gute Arbeit in der Bibliothek. Es gibt einige Belästigungen, z. B. dass die Bilder bei jeder reloadData-Nachricht neu geladen werden oder Bilder auf jedem Tabellen-Scroll erscheinen. Sie können sich das ansehen. Danke und Glückwunsch! – Devfly

+0

Danke für die Rückmeldung. Wenn Sie sich auf die Animationssequenz beim Laden von Bildern beziehen, können Sie dies mithilfe der animate-Eigenschaft deaktivieren. – adig

+0

Ja, das ist großartig, ich habe es bereits implementiert. – Devfly

24

SDWebImage Entwickler Olivier Poitrey beantwortete diese Frage für mich here.

Sie haben die SDWebImageManagerDelegate Protokoll zu implementieren und dann eingestellt, wie die gemeinsamen Delegierten-Manager wie folgt aus:

SDWebImageManager.sharedManager.delegate = self; 

using the imageManager:transformDownloadedImage:withURL: instance method. 

More information.

perfekt für mich gearbeitet.

+1

Das ist genial! Danke, dass du mich in die richtige Richtung gelenkt hast. – kleo

+0

Sorry hat nicht bekommen. Ich verwende die Platzhaltermethode UIImageView + WebCache.h sd_setImageWithURL: (NSURL *) url placeholderImage: (UIImage *) Platzhaltermethode für das Bild jeder Zelle. Was soll ich tun, können Sie das bitte in Laienform sagen? –

0

SDWebImage 3.8.2

Wenn UIImageView Kategorie sd_setImageWithURL verwenden. Ich habe eine andere UIImageView Kategorie erstellt (Erweiterung)

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 
       } 
      } 
     } 
    } 
} 
0

Expansion auf Maestros Antwort in 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() 
     } 
    } 
}