2016-03-28 10 views
1

Hallo Ich zeige Bilder in meiner App mit sdwebImage an. Ich habe hier einen Code die Größe des BildesGröße ändern sdwebImage swift

func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage { 

    let scale = newWidth/image.size.width 
    let newHeight = image.size.height * scale 
    UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight)) 
    image.drawInRect(CGRectMake(0, 0, newWidth, newHeight)) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage 
} 

Das Problem ist die obige Funktion die UIImage als Parameter akzeptiert und sdwebimage akzeptiert die URL. Wie kann ich die obige Größenänderungsfunktion in sdwebimage aufrufen. oder kurz gesagt, wie kann ich die Größe des Bildes, die hier präsentiert durch sdwebImage

cell.profileImageView.sd_setImageWithURL(UIImage().absoluteURL(profileImageUrl as! String), placeholderImage: UIImage.init(named: "default-profile-icon")?.circle!, completed: completionBlock) 
+0

sdwebimage akzeptieren Sie die URL, aber Sie haben in diesem Bild in meinem Wissen angewendet, gibt es kein Problem –

+0

Entschuldigung, was es bedeutet. Es tut mir leid, dass ich dich nicht bekommen habe – hellosheikh

+0

in meinem Wissen in Ihrem Code ist richtig, ein Zweifel, wo Sie 'resizeImage' Methode aufgerufen –

Antwort

3

Ich bin nicht familier mit schnellen, versuchen Sie diese

cell.profileImageView.sd_setImageWithURL(
    NSURL(string: profileImageUrl as! String), 
    placeholderImage: UIImage.init(named: "default-profile-icon"), 
    options: nil, 
    progress: nil, 
    completed: { (image: UIImage?, error: NSError?, cacheType: SDImageCacheType!, imageURL: NSURL?) in 

     guard let image = image else { return } 
     print("Image arrived!") 
     cell.profileImageView.image = resizeImage(image, newWidth: 200) 
    } 
) 
+0

innerhalb der Block aufrufen, dass Größe Methode –

+0

Ihr Problem ist gelöst oder nicht, wenn meine Antwort nicht sinnvoll ist Antwort einmal lösche ich meine Antwort –

1

SDWebImage unterstützt Bild direkt durch seine SDWebImageManagerDelegate Protokoll Handhabung. Sie können die Methode imageManager:transformDownloadedImage:withURL: verwenden, um das heruntergeladene Bild zu transformieren.

Sie können den Bildmanager delegieren wie folgt festgelegt:

SDWebImageManager.sharedManager.delegate = self; 
+0

können Sie bitte schreiben vollständigen Code oder bearbeiten Sie meinen Code. – hellosheikh

0

Nutzung geteilt SDWebImageManager nicht gute Idee. Einige Prozesse können Bilder in dieser Zeit herunterladen.

Mein swift 3-Beispiel mit benutzerdefiniertem SDWebImageManager in der Klasse und benutzerdefinierten SDWebImageManagerDelegate-Resizer.

import SDWebImage 

class ImageResizer: NSObject, SDWebImageManagerDelegate { 
    private func resizeImage(_ image: UIImage, newHeight: CGFloat) -> UIImage { 
     let scale = newHeight/image.size.height 
     let newWidth = image.size.width * scale 

     UIGraphicsBeginImageContextWithOptions(CGSize(width: newWidth, height: newHeight), false, 0) 
     image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)) 
     let newImage = UIGraphicsGetImageFromCurrentImageContext() 
     UIGraphicsEndImageContext() 

     return newImage! 
    } 

    public func imageManager(_ imageManager: SDWebImageManager, transformDownloadedImage image: UIImage?, with imageURL: URL?) -> UIImage? { 
     guard let _image = image else { 
      return nil 
     } 

     return resizeImage(_image, newHeight: 20) 
    } 
} 


class BasicTrainView: XibView { 
    static let imageManager: SDWebImageManager = SDWebImageManager() 
    static let imageResizer = ImageResizer() 

    func xxx() { 
     BasicTrainView.imageManager.delegate = BasicTrainView.imageResizer 
     BasicTrainView.imageManager.loadImage(with: logoURL, options: [], progress: nil) { (image, _, error, sdImageCacheType, _, url) -> Void in 
      guard let _image = image else { 
       self.carrierLogoImageView.image = nil 
       return 
      } 

      self.carrierLogoImageView.image = _image 
     } 
    } 
}