Pour créer une UiImage avec un fichier image, j'utilise le code ci-dessous:
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
Si je veux créer une UiImage avec l'URL http://example.com/demo.jpg , comment faire cela?
Merci
METTRE À JOUR
C'est un processus en trois étapes. Tout d'abord, vous allez créer un objet NSURL
pour contenir l'URL à laquelle nous essayons d'accéder. Nous fournirons cette URL à la méthode de classe NSData
, +dataWithContentsOfURL:
pour obtenir l'image sur le réseau en tant que données brutes, puis nous utiliserons la méthode de classe +imageWithData:
sur UIImage
pour convertir les données en image.
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];
Veuillez noter que +dataWithContentsOfURL:
exécute une demande de réseau synchrone. Si vous l'exécutez sur le thread principal, l'interface utilisateur sera bloquée jusqu'à ce que les données d'image soient reçues du réseau. La meilleure pratique consiste à exécuter n'importe quel code de réseau sur un thread en arrière-plan. Si vous ciblez OS 4.0+, vous pouvez faire quelque chose comme ça ...
NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI
self.imageView.image = [UIImage imageWithData:imageData];
});
});
Voici à quoi pourrait ressembler le même code dans Swift:
let image_url = NSURL("http://i.imgur.com/3yY2qdu.jpg")
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let image_data = NSData(contentsOfURL: image_url!)
dispatch_async(dispatch_get_main_queue()) {
// update some UI
let image = UIImage(data: image_data!)
self.imageView.image = image
}
}
Pour ceux qui cherchent à charger une image à partir du Web, la bibliothèque suivante peut être utile:
https://github.com/rs/SDWebImage
C'est une catégorie UIImageView
qui gère le chargement asynchrone et la mise en cache des images à partir de l'URL.