Улучшение производительности прокрутки UITableView при загрузке изображений - PullRequest
1 голос
/ 06 января 2011

У меня есть сетка с прокруткой фотографий, которая выглядит и функционирует почти так же, как сборщик фотографий на iPhone. Он построен из UITableView, который использует пользовательский UITableViewCell, который отображает ряд фотографий (очень похоже на то, как Three20 реализует его).

Отлично работает, за исключением того, что производительность прокрутки плохая. Я уже следую большинству рекомендаций по быстрой прокрутке UITableView (а-ля Tweetie ).

Изображения все в комплекте с приложением. Я загружаю их в поток пользовательского интерфейса, по требованию. Я использую UIImage imageNamed: так, чтобы изображения были кэшированы после их первой загрузки. Как только я прокручиваю табличное представление один раз, оно прокручивается очень плавно.

Проблема в том, что при первой прокрутке табличного представления прокрутка вызывает дрожь. Я профилировал приложение и обнаружил, что большую часть времени тратится на загрузку изображений из файловой системы. Это изображения в формате JPEG, которые уже имеют правильный размер (маленький). Вместо этого я попытался использовать изображения в формате PNG, но производительность не сильно улучшилась.

Средство выбора фотографий iPhone демонстрирует гораздо лучшую производительность при загрузке. Мне интересно, было бы быстрее объединить все фотографии в одно изображение, которое я загружаю один раз, а затем делю на более мелкие изображения. Это, безусловно, работает в играх, но я знаю, что это совсем другая история. У кого-нибудь был такой опыт?

Какие-нибудь другие идеи, как я могу улучшить производительность?

Кстати, у меня есть похожая, хотя и меньшая, проблема производительности для другого UITableView, который просто использует стандартные UITableViewCells с одним изображением, назначенным для imageView на строку.

Ответы [ 4 ]

2 голосов
/ 06 января 2011

Можно попробовать предварительно кэшировать все изображения при загрузке представления.Кроме того, возможно загрузка изображений в фоновом режиме (даже если это загрузка из файловой системы, а не из Интернета).Я сам не пробовал, но, возможно, вы могли бы использовать что-то вроде https://github.com/rs/SDWebImage и чтобы URL-адреса указывали на файловую систему.Сначала пользователи могут видеть некоторые изображения-заполнители, но тогда пользовательский интерфейс не заикается во время загрузки изображений.

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

Отключение свойства PagingEnabled повышает производительность прокрутки.

0 голосов
/ 22 января 2011

Фантастическая.Это работает как шарм!Так эффективно я в конечном итоге использовал insertRowAtIndexPath, а не перезагружал таблицу.Теперь он ведет себя так, как он

Большое спасибо!Джо

0 голосов
/ 20 января 2011

У меня была похожая проблема с использованием UITableView для отображения информации, проанализированной из RSS-канала.Я столкнулся с проблемами производительности прокрутки, когда было значительное количество данных.Хотя я все еще работаю над этим, я приостанавливаю синтаксический анализ, когда таблица прокручивается.Возобновляется, когда прокрутка останавливается.Я не за компьютером, но я думаю, что использовал tableViewDidScroll и tableViewDidEndDecelerating.Вы можете проверить этих представителей таблицы.В любом случае это работает очень хорошо, мне просто нужен более элегантный способ приостановить мой анализ.

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