Как плавно прокрутить 600-ю метки на большом uiscrollview (iphone) - PullRequest
0 голосов
/ 09 мая 2011

У меня есть небольшая диаграмма Ганта, которую я хочу видеть на iphone.

Она имеет размер 7200 x 1800 пикселей и состоит из ~ 600 баров, каждый из которых представляет собой UILabel.

Это выглядит так:

Gannt

Теперь я получил его на работу.И при ~ 100 барах я могу сделать это довольно плавно, просто добавив их все в представление прокрутки.Тем не менее, с полными 600 (или более в конечном итоге) он просто падает, когда я создаю все эти uilabels и добавляю их все в представление прокрутки как подпредставления.

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

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

У кого-нибудь есть предложения по решению этой проблемы?Есть идеи, что такое медленная часть?Создание экземпляров uilabels, или добавление их в качестве подпредставлений, или что-нибудь еще?

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 09 мая 2011

У Apple есть действительно хороший демонстрационный код, который показывает, как это сделать. Проверьте TiledScrollView.m , особенно метод layoutSubviews.

Другие вещи, которые вы могли бы рассмотреть:

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

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

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

1 голос
/ 09 мая 2011

Просто мысль, но может быть проблема в том, что, даже если вы кэшируете и повторно используете метки, представление прокрутки все еще сохраняет их, поэтому, даже если у вас может быть только несколько меток, каждая из них сохраняется сотни раз. Если это так, то я думаю, что представление прокрутки все еще эффективно пытается управлять этими сотнями строк.

Так как @Nathon S спросил - ты их двигаешь? то есть построение конечного набора меток и просто перемещение их в представлении прокрутки в соответствии с областью просмотра. Если вы прячете и повторно добавляете в представление прокрутки, то я бы заподозрил, что массивный набор удержаний является замедлением. Я думаю, что с движущимся дизайном этикетки, вам не нужно было бы делать какие-либо скрытия и добавления после первоначального показа. Что должно сделать его очень быстрым и легким.

...