2016-12-09 4 views
1

Предпосылки - Окружающая среда: IOS 9.0 или выше - с помощью Swift 3.0.1Загрузка и отображение случайных клеток в UICollectionView

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

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

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

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

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

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

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

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

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

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

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

Надеюсь, что это яснее. I have "tried" to mock this up

+0

Будет проще, если вы покажете коды, используемые в настоящее время, для расчета вашего xPosition и использования вами для заполнения коллекции. Насколько я пытался, с данными, используемыми для заполнения представления коллекции, всегда можно рассчитать indexPath определенного элемента, который вы ищете. –

+0

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

+0

Если вы реализуете надежную ** ленивую загрузку ** основанный на пути индекса, вы можете просто использовать 'scrollToItem (at: at: анимированные:)' ([ссылка] (https://developer.apple.com/reference/uikit/uicollectionview/1618046-scrolltoitem)) для прокрутки коллекции просмотреть соответствующий путь индекса. – lukya

ответ

0
+0

Не работает. Я обновил вопрос, надеюсь, что вы лучше поймете проблему – hdawg

0

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

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

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

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

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

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

Смежные вопросы