47 votes

Créer une UIImage avec une URL dans iOS

Pour créer une UiImage avec un fichier d'image, j'ai utiliser le code comme 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 le faire?

Merci

Mise à JOUR

enter image description here

152voto

Mark Adams Points 17189

C'est un processus en trois étapes. Vous allez commencer par créer un NSURL objet pour contenir l'URL, nous tentons d'accès. Nous assurons la fourniture de cette URL pour l' NSData méthode de classe, +dataWithContentsOfURL: pour obtenir l'image sur le réseau en tant que données brutes, puis utilisez l' +imageWithData: méthode de classe sur UIImage pour convertir les données en une image.

NSURL *imageURL = [NSURL URLWithString:@"http://example.com/demo.jpg"];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage *image = [UIImage imageWithData:imageData];

Veuillez noter que l' +dataWithContentsOfURL: exécute un réseau synchrone demande. Si vous exécutez ce code sur le thread principal, il permet de bloquer l'INTERFACE utilisateur jusqu'à ce que l'image est reçue à partir du réseau. La meilleure pratique est d'exécuter n'importe quel code de réseau sur un thread d'arrière-plan. Si vous ciblez des OS 4.0+, vous pourriez 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];
    });
});

7voto

Dave Kiss Points 5031

Voici ce que le même code pourrait ressembler à 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
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X