Как отобразить прогрессивный JPEG в UIImageView во время его загрузки? - PullRequest
8 голосов
/ 20 января 2011

Скачать изображение из сети и показать его в UIImageView довольно просто. Однако для этого требуется, чтобы изображение было полностью загружено, прежде чем оно будет показано пользователю, полностью подавляя прогрессивные изображения JPEG (и PNG).

Как отобразить частично загруженные изображения во время передачи? Я мог бы представить, что в SDK есть какая-то функция обратного вызова, которая обновляет изображение, но я не могу найти такую ​​функцию. Возможно ли это вообще с текущим iOS SDK?

Ответы [ 3 ]

10 голосов
/ 07 февраля 2012

Я знаю, что у этого поста около 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];

Кроме того, хорошим вариантом является сохранение изображений в формате * 1012.* так что он загружается с низким качеством и улучшается с загрузкой.Если изображение не чересстрочное, оно загружается сверху вниз.

1 голос
/ 20 апреля 2015

В дополнение к 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

0 голосов
/ 24 января 2011

Вы пытались визуализировать 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;
    }
}
...