Как отобразить прогрессивный JPEG в UIImageView во время его загрузки?
-
12-10-2019 - |
Вопрос
Загрузить изображение из сети и отобразить его в UIImageView довольно просто.Однако для этого требуется, чтобы изображение было полностью загружено, прежде чем оно будет показано пользователю, что полностью исключает прогрессивные изображения JPEG (и PNG).
Как я могу визуализировать частично загруженные изображения во время передачи?Я предполагаю, что в SDK есть функция обратного вызова, которая будет обновлять изображение, но я не могу найти такую функцию.Возможно ли это вообще с текущим iOS SDK?
Решение
Вы пытались частично отобразить UIImage при вызове DidReceiveData…?Что-то вроде …
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//TODO: add some error handling in case the image could not be created
UIImage *img=[UIImage imageWithData:data];
if (img) {
self.imageView.image=img;
}
}
Другие советы
Я знаю, что этому посту около 1 года, но на случай, если кто-то его ищет, есть проект под названием NYXImagesKit это делает то, что вы ищете.
У него есть класс с именем NYXProgressiveImageView
это подкласс UIImageView
.
Все, что вам нужно сделать, это:
NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init];
imgv.frame = CGRectMake(0, 0, 320, 480);
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]];
[self.view addSubview:imgv];
[imgv release];
Кроме того, хороший вариант — сохранить изображения как interlaced
так что он загружается с низким качеством и улучшается по мере загрузки.Если изображение не чересстрочное, оно загружается сверху вниз.
Теперь поверх libjpeg-turbo существует небольшая библиотека с открытым исходным кодом, которая позволяет легко декодировать и отображать прогрессивные файлы JPEG:
let imageView = CCBufferedImageView(frame: ...)
if let url = NSURL(string: "http://example.com/yolo.jpg") {
imageView.load(url)
}