Как отобразить прогрессивный JPEG в UIImageView во время его загрузки?
Скачать изображение из сети и показать его в UIImageView довольно просто. Однако для этого требуется, чтобы изображение было полностью загружено, прежде чем оно будет показано пользователю, полностью подавляя прогрессивные изображения JPEG (и PNG).
Как я могу воспроизвести частично загруженные изображения во время передачи? Я мог бы представить, что в SDK есть какая-то функция обратного вызова, которая обновляет изображение, но я не могу найти такую функцию. Возможно ли это вообще с текущим iOS SDK?
3 ответа
Вы пытались визуализировать 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)
}