Управление большим количеством дорогих UIViews в UIScrollview - PullRequest
2 голосов
/ 10 августа 2010

Приложение для iPad, которое я разрабатываю, покажет полноэкранный режим UIScrollView, позволяющий пользователю пролистывать большое количество (200 или более) изображений - все одного размера, без подкачки страниц.Изображения должны быть загружены из Интернета и не имеют предопределенного порядка.Прямо сейчас я делаю

  1. Я загружаю и анализирую XML-ленту, которая содержит ссылки на загружаемые изображения, а также метаданные, которые я показываю на оборотной стороне.Я храню все это в отдельных объектах, которые управляют видом спереди и сзади и переключаются между ними.
  2. Представления созданных объектов помещаются в UIScrollView в сетке, сначала показывая изображение заполнителя.
  3. Как только URL-адрес изображения установлен в объекте, он извлекает само изображение, используя `NSURLConnection`.Когда изображение полностью загружено, оно заменяет заполнитель изображения.

Это работает достаточно хорошо для ограниченного числа объектов (даже если пользовательский интерфейс иногда не отвечает), но не масштабируется.Приложение вылетает, когда я загружаю более 60-70 пользовательских контроллеров представления.Большинство из них, конечно, за кадром - изображения размером 280x280, поэтому в любой момент времени будут видны только 12 изображений.

Полагаю, мне нужно найти способ продолжать загружать данные в фоновом режиме, но управлять только теми представлениями, которые фактически находятся (или близки) в видимом экстенте UIScrollView.Нужно ли использовать Core Data для управления этим?Если бы вы справились с подобной задачей, я бы хотел услышать, как вы ее решили - я думаю, это довольно распространенная проблема.

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Вы не загружаете 60-70 контроллеров представления. У вас есть только количество контроллеров представления на экране, и когда представление прокручивается (скажем) вниз, вы берете контроллер сверху, меняете изображение на тот, который вы сохранили, и помещаете его внизу.

Другие загружаемые файлы можно скачать в фоновом режиме. Вам не нужны основные данные (хотя вы можете использовать их, если хотите).

Посмотрите видео с яблоками на экранах прокрутки, они охватывают это.

0 голосов
/ 10 августа 2010

Вот как я это сделал. Я только показал 3 UIView's в то время, и каждый раз, когда пользователь идет вперед, я выгружаю первый UIView и загружаю новый UIView. Пользователь не замечает этого, потому что следующий экран и предыдущий экран всегда загружаются ( 3 UIViews)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...