Чтобы создать UiImage с файлом изображения, я использую следующий код:
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
Если я хочу создать UiImage с URL http://example.com/demo.jpg, как это сделать?
Спасибо
ОБНОВЛЕНИЕ
Чтобы создать UiImage с файлом изображения, я использую следующий код:
UIImage *aImage = [[UIImage imageNamed:@"demo.jpg"]autorelease];
Если я хочу создать UiImage с URL http://example.com/demo.jpg, как это сделать?
Спасибо
ОБНОВЛЕНИЕ
Это трехэтапный процесс. Сначала вы создадите объект 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];
});
});
Вот какой код может выглядеть в 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
}
}
Для тех, кто хочет загрузить изображение из Интернета, может оказаться полезной следующая библиотека:
https://github.com/rs/SDWebImage
Это категория UIImageView
, которая обрабатывает асинхронную загрузку и кэширование изображений из URL.