webentwicklung-frage-antwort-db.com.de

Erstellen Sie einen UIImage mit einer URL in iOS

Um ein UiImage mit einer Image-Datei zu erstellen, verwende ich den folgenden Code:

UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];

Wenn ich ein UiImage mit der URL http://example.com/demo.jpg erstellen möchte, wie geht das?

Vielen Dank

AKTUALISIEREN

enter image description here

47
Charles Yeung

Dies ist ein dreistufiger Prozess. Zunächst erstellen Sie ein NSURL-Objekt, das die URL enthält, auf die Sie zugreifen möchten. Wir geben diese URL an die NSData-Klassenmethode, +dataWithContentsOfURL:, um das Bild als Rohdaten über das Netzwerk zu erhalten, und konvertieren Sie die Daten anschließend mit der +imageWithData:-Klassenmethode für UIImage in ein Bild.

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

Bitte beachten Sie, dass +dataWithContentsOfURL: eine synchrone Netzwerkanfrage ausführt. Wenn Sie dies im Haupt-Thread ausführen, wird die Benutzeroberfläche so lange blockiert, bis die Bilddaten vom Netzwerk empfangen werden. Es wird empfohlen, jeden Netzwerkcode in einem Hintergrundthread auszuführen. Wenn Sie auf OS 4.0 oder höher abzielen, können Sie so etwas tun ...

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

So könnte der gleiche Code in Swift aussehen:

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

Für alle, die ein Bild aus dem Internet laden möchten, kann die folgende Bibliothek hilfreich sein:

https://github.com/rs/SDWebImage

Es ist eine UIImageView-Kategorie, die das asynchrone Laden und das Zwischenspeichern von Bildern von der URL übernimmt.

0
vir us