Динамическая загрузка изображений - PullRequest
1 голос
/ 25 ноября 2011

Недавно я столкнулся с проблемой динамической (ленивой) загрузки изображений внутри элементов (UIViewController-Subclasses), которые размещаются в UIScrollView.

Ситуация выглядит следующим образом:

  • большое количество книг с обложками должно отображаться в виде прокрутки с горизонтальной прокруткой
  • из-за ограничений памяти я перерабатываю элементы книги; Я использую набор из 30 экземпляров книги и заново устанавливаю их местоположение в UIScrollView при вызове метода didScroll-Delegate.
  • после переустановки фрейма элемента книги он также будет обновлен новым содержанием (новая информация о книге)
  • при обновлении элемента книги изображение обложки книги исчезает, запускает поток, который загружает изображение из Интернета и после завершения устанавливает его в свойство изображения UIImageViewController.

пока все хорошо, ленивая загрузка работает отлично, и повторное использование моих элементов книги работает также ...

проблема в том, что асинхронно загруженные изображения будут отображаться только после того, как UIScrollview завершит анимацию прокрутки.

Я уже пробовал такие вещи, как setNeedsDisplay (после завершения загрузки изображения). Но это совсем не помогло ...

Надеюсь, у вас, ребята, есть совет для меня ....

спасибо, Сэм

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Вы должны установить NSURLConnection для вызова его delagate в главном цикле выполнения, чтобы пользовательский интерфейс мог быть обновлен. Проверьте ссылку NSURLConnection class и найдите:

- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode

Код должен выглядеть так:

urlConn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];

[urlConn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

[urlConn start];

Установка режима цикла выполнения соединения на NSRunLoopCommonModes , когда выборка изображений дает делегату возможность обновлять пользовательский интерфейс, когда основной цикл выполнения находится в режиме отслеживания событий пользовательского интерфейса, например, когда просматривается таблица или прокрутка.

0 голосов
/ 26 ноября 2011

Используете ли вы сетевую работу?

Если нет, то я бы посоветовал использовать AFNetworking. Смотрите следующий код:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
[imageView setImageWithURL:[NSURL URLWithString:@"http://i.imgur.com/r4uwx.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder-avatar"]];

Смотрите здесь:

AFNetworking

...