Загрузка и отображение случайных ячеек в UICollectionView

Предварительные условия - Среда: iOS 9.0 или выше - использование Swift 3.0.1

Спасибо за ваши ответы. Я обновляю вопрос и пытаюсь дать лучшее понимание проблемы.

Публикация кода может помочь, но я не могу публиковать код, так как у меня нет IP.

Но я пытаюсь создать что-то вроде календаря / программы передач, где у вас есть события для каждой категории на несколько дней.

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

CAT 1: событие 1, событие 2 ... событие n CAT 2: событие 1, событие 2 ... событие n CAT 3: событие 1, событие 2 ... событие n.,, CAT m: событие 1, событие 2 ... событие n

Проблема: все данные довольно динамичны и огромны. Я не могу предварительно выбрать все записи, они более 80-100K. Загрузка всех данных и отображение их в сетке занимает несколько минут.

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

Тем не менее, в первом варианте, когда пользователь переходит к определенному дню и времени на всей временной шкале, и мне приходится пропускать загрузку других предыдущих событий (поскольку у меня их пока нет - неизвестно) и отображать события, относящиеся к пользователю. выбранные дни и время.

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

Я использую startDate событий для вычисления xPosition, категории не меняются часто после их загрузки, поэтому мы можем как-то избежать перезагрузки разделов, но элементы в этих разделах изменяются все время, и они появляются случайным образом.

Когда контроллер загружает первый набор событий, которые извлекаются с сервера и отображаются, теперь, если пользователь решил перейти на некоторые D-Day и T-Time, которые могут быть где угодно на всей временной шкале, я должен получить события для этих дат и заполните пункты для соответствующих разделов (видимых на экране) и обновите интерфейс. Это где у меня есть проблемы, где у меня нет правильного подхода.

Надеюсь, это понятнее. Я "пытался" издеваться над этим

2 ответа

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

В моем календаре есть функция, с помощью которой пользователь может перейти к какой-то дате в будущем. Проблема заключалась в том, что ячейки даты могут быть нестандартных размеров. Поэтому, поскольку они прокручиваются до некоторой будущей даты, для того, чтобы я знал пункт назначения offsetМне нужно было знать смещения ячеек 0 -to- destinationOffset потому что размеры клеток разные. Это означало, что мне пришлось запросить размеры всех ячеек в середине, что привело к задержке 2-3 (или, в вашем случае, к длительному времени загрузки).

Итак, вот мое решение. У меня изначально была функция делегата под названием sizeForCellsAtMonth который был вызван на каждый месяц, чтобы определить размер. Теперь я изменил эту функцию, чтобы она вызывалась только один раз.

Функция теперь имеет только два параметра:

  1. defaultSizeOfCells
  2. exceptionToDefaults - это будут конкретные месяцы, когда размеры ячеек различны

Используя эту информацию, я могу рассчитать размеры всех месяцев, потому что я знаю размеры заранее. Так что моя проблема была решена путем изменения того, как я смотрю на своего делегата. Может быть, вы можете попытаться найти что-то в этом роде или, возможно, мой ответ дал вам подсказки о том, что вы можете сделать.

Другие вопросы по тегам