from ios uiimageview uiimage nsurl

from - iOS: cargar una imagen desde url



swift 3 uiimage from url (5)

EN SWIFT 3.0

El hilo principal debe permanecer siempre libre para que sirva a la interfaz de usuario y las interacciones del usuario.

class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! private func fetchImage() { let imageURL = URL(string: "https://i.stack.imgur.com/9z6nS.png") var image: UIImage? if let url = imageURL { //All network operations has to run on different thread(not on main thread). DispatchQueue.global(qos: .userInitiated).async { let imageData = NSData(contentsOf: url) //All UI operations has to run on main thread. DispatchQueue.main.async { if imageData != nil { image = UIImage(data: imageData as! Data) self.imageView.image = image self.imageView.sizeToFit() } else { image = nil } } } } } override func viewDidLoad() { super.viewDidLoad() fetchImage() } }

Necesito cargar una imagen desde una url y configurarla dentro de un UIImageView; el problema es que no sé el tamaño exacto de la imagen, entonces, ¿cómo puedo mostrar la imagen correctamente?


En veloz

var url = NSURL.URLWithString("http://www.example.com/picture.png") var data = NSData(contentsOfURL : url) var image = UIImage(data : data) image.size // if you need it


En veloz con respecto al uso de opciones:

var url:NSURL? = NSURL(string: imageString) var data:NSData? = NSData(contentsOfURL : url!) var image = UIImage(data : data!)


Para descargar la imagen asíncrona con la biblioteca de Kingfisher, puede seguir este paso, url: https://github.com/onevcat/Kingfisher :

func imageFromUrl(_ urlString: String) { if let url = URL(string: urlString) { ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) { (image, error, url, data) in DispatchQueue.main.async { self.imageView.image = image } } } }

También puede descargar la imagen con la URLSession.shared.dataTask predeterminada

func imageFromUrl(_ urlString: String) { if let url = URL(string: urlString) { let request = URLRequest(url: url) URLSession.shared.dataTask(with: request) {(data,response,error) in if let imageData = data as Data? { if let img = UIImage(data: imageData){ DispatchQueue.main.async { self.imageView.image = img } } } } } }


Solo usa la propiedad size de UIImage, por ejemplo:

NSURL *url = [NSURL URLWithString:path]; NSData *data = [NSData dataWithContentsOfURL:url]; UIImage *img = [[UIImage alloc] initWithData:data]; CGSize size = img.size;