Создайте UIImage с URL в iOS - PullRequest
       15

Создайте UIImage с URL в iOS

47 голосов
/ 08 октября 2011

Чтобы создать UiImage с файлом изображения, я использую следующий код:

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

Если я хочу создать UiImage с URL http://example.com/demo.jpg,, как это сделать?

Спасибо

ОБНОВЛЕНИЕ

enter image description here

Ответы [ 3 ]

152 голосов
/ 08 октября 2011

Это трехступенчатый процесс. Сначала вы создадите объект NSURL для хранения URL, к которому мы пытаемся получить доступ. Мы передадим этот URL методу класса NSData, +dataWithContentsOfURL:, чтобы получить изображение по сети в виде необработанных данных, а затем используем метод класса +imageWithData: в UIImage, чтобы преобразовать данные в изображение.

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

Обратите внимание, что +dataWithContentsOfURL: выполняет синхронный сетевой запрос. Если вы запустите это в главном потоке, он будет блокировать пользовательский интерфейс, пока данные изображения не будут получены из сети. Рекомендуется запускать любой сетевой код в фоновом потоке. Если вы ориентируетесь на OS 4.0+, вы можете сделать что-то вроде этого ...

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];
    });
});
7 голосов
/ 24 октября 2014

Вот как может выглядеть тот же код в 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
    }
}
0 голосов
/ 02 июня 2016

Для тех, кто хочет загрузить изображение из Интернета, может быть полезна следующая библиотека:

https://github.com/rs/SDWebImage

Это категория UIImageView, которая обрабатывает асинхронную загрузку и кэширование изображений из URL.

...