У меня есть URL-адрес для изображения (полученный из UIImagePickerController), но у меня больше нет изображения в памяти (URL-адрес был сохранен из предыдущего запуска приложения). Могу ли я снова загрузить UIImage из URL?
Я вижу, что в UIImage есть imageWithContentsOfFile: но у меня есть URL. Могу ли я использовать NSData dataWithContentsOfURL: для чтения URL?
EDIT1
основываясь на ответе @ Daniel, я попробовал следующий код, но он не работает ...
NSLog(@"%s %@", __PRETTY_FUNCTION__, photoURL);
if (photoURL) {
NSURL* aURL = [NSURL URLWithString:photoURL];
NSData* data = [[NSData alloc] initWithContentsOfURL:aURL];
self.photoImage = [UIImage imageWithData:data];
[data release];
}
Когда я запустил его, консоль показывает:
-[PhotoBox willMoveToWindow:] file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG
*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL length]: unrecognized selector sent to instance 0x536fbe0'
Глядя на стек вызовов, я вызываю URLWithString, который вызывает URLWithString :lativeToURL :, затем initWithString :lativeToURL :, затем _CFStringIsLegalURLString, затем CFStringGetLength, затем forwarding_prep_0 , затем переадресация , затем - [NSObject doesNotRecorSignS.]
Любые идеи, почему мой NSString (адрес photoURL 0x536fbe0) не отвечает на длину? Почему говорится, что он не отвечает - [длина NSURL]? Разве он не знает, что param - это NSString, а не NSURL?
EDIT2
ОК, единственная проблема с кодом - преобразование строки в URL. Если я жестко закодирую строку, все остальное работает нормально. Так что что-то не так с моей строкой NSString, и если я не могу понять это, я думаю, что это должно быть другим вопросом. С этой вставленной строкой (я вставил путь из журнала консоли выше), она работает нормально:
photoURL = @"file://localhost/Users/gary/Library/Application%20Support/iPhone%20Simulator/3.2/Media/DCIM/100APPLE/IMG_0004.JPG";
источник
Ответы:
Вы можете сделать это так (синхронно, но компактно):
Гораздо лучшим подходом является использование Apple LazyTableImages для сохранения интерактивности.
источник
Вы можете попробовать SDWebImage , он обеспечивает:
Быстрый пример:
источник
UIImageView
.SDWebImage
также позволяет заполнятьUIImage
напрямуюSDWebImageManager
- (void) downloadWithURL:...
. Смотрите их пример на прочитанном мной.И быстрая версия:
источник
Если вы на самом деле , абсолютно положительно уверен , что NSURL является файл URL, то есть
[url isFileURL]
гарантированно возвращает истину в вашем случае, то вы можете просто использовать:источник
получите DLImageLoader и попробуйте следующий код
Другой типичный пример использования DLImageLoader, который может кому-то помочь ...
Как я упоминал выше, еще одна замечательная библиотека, которую стоит рассмотреть в наши дни - это Haneke (к сожалению, она не такая легкая).
источник
Попробуйте этот код, вы можете установить загрузку изображения с ним, чтобы пользователи знали, что ваше приложение загружает изображение из URL:
источник
Проверьте
AsyncImageView
предоставленный здесь . Хороший пример кода, и он может быть даже полезен прямо из коробки.источник
AFNetworking обеспечивает асинхронную загрузку изображений в UIImageView с поддержкой заполнителей. Он также поддерживает асинхронную сеть для работы с API в целом.
источник
Обязательно включите эти настройки из iOS 9:
Установите параметры безопасности транспорта в Info.plist, чтобы обеспечить загрузку изображения с URL-адреса, что позволит загрузить изображение и установить его.
И напишите этот код:
источник
Способ использования расширения Swift для
UIImageView
(исходный код здесь ):Создание вычисляемого свойства для связанного
UIActivityIndicatorView
Пользовательский инициализатор и сеттер
источник
Лучший и простой способ загрузить изображение через URL - это код:
Замените
imgUrl
своимImageURL
Замените
imgView
своимUIImageView
.Он загрузит изображение в другой поток, поэтому он не замедлит загрузку вашего приложения.
источник