web-dev-qa-db-fra.com

Créer un UIImage avec une URL dans iOS

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

enter image description here

47
Charles Yeung

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];
    });
});
150
Mark Adams

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
    }
}
7
Dave Kiss

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.

0
vir us