Как отобразить прогрессивный JPEG в UIImageView во время его загрузки?

StackOverflow https://stackoverflow.com/questions/4741486

Вопрос

Загрузить изображение из сети и отобразить его в 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)
}

видеть https://github.com/contentful-labs/Concorde

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top