Есть несколько вариантов:
1) Сохраните изображения на сервере в формате, поддерживающем прогрессивную загрузку ( прогрессивный JPEG , чересстрочный PNG ). Я думаю, что вам придётся придумать специальную поддержку на клиенте, т.е. написать часть декодирования изображения из PNG / JPEG в UIImage
самостоятельно, предположительно используя некоторую библиотеку.
2) Сохраните небольшой эскиз вдоль каждого изображения на сервере. Если вы хотите загрузить изображение, вы сначала загрузите миниатюру, выполните простое масштабирование, чтобы растянуть его до полного размера изображения, а тем временем загрузить полную версию. Там может быть несколько миниатюр в разных размерах, если вы действительно хотите стать модным. У вас будет больше данных на сервере, но код клиента должен быть довольно простым.
3) Может быть, у вас уже есть эскизы на клиенте? В этом случае вы можете растянуть миниатюру до полного размера изображения, чтобы создать версию с низким разрешением, а остальные загружать.
И если вы спрашиваете о том, как точно кодировать второе или третье решение… Вам действительно не нужны явные потоки, и я не уверен, что означает «слой» в этом контексте. Загрузка UIImage
из сети довольно проста, примерно так:
NSURL *url = [NSURL URLWithString:@"http://somewhere/foo.png"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSData *data = [NSURLConnection sendSynchronousRequest:request
returningResponse:NULL error:NULL];
UIImage *image = [UIImage imageWithData:data];
Вы можете превратить этот код в функцию, загрузить и отобразить миниатюру, а затем загрузить и отобразить полное изображение. Все это можно сделать в фоновом режиме , чтобы вы могли что-то сделать во время загрузки данных.