Ленивая загрузка изображений в UITableView с индексом прокрутки - PullRequest
1 голос
/ 09 июня 2011

Я думаю, что это новый подход к старому вопросу, но я полностью застрял здесь.

В моем приложении у меня есть UITableView с 650 ячейками, каждая из которых имеет свой собственный значок RGB 16x16.На большинстве последних устройств iOS загрузка всех этих значков в память перед отображением таблицы работает совершенно нормально, но на более старом оборудовании я хотел бы реализовать систему отложенной загрузки, которая загружает только нужные значки.

IЯ реализовал пример Apple LazyTableImages (который использует делегат UIScrollView, чтобы определить, когда таблица перестает перемещаться, чтобы загрузить видимые значки), но я столкнулся с другой ошибкой.

MyUITableView также имеет индексное отображение раздела (т. Е. Список меток с правой стороны, который можно перемещать вверх и вниз для быстрой прокрутки), и пример LazyTableImages не принял это во внимание.Если я прокручиваю, используя индекс, изображения не будут загружаться.: (

Насколько я вижу, в индексе прокрутки фактически нет событий делегата, которые он запускает. Поэтому мне интересно, кто-нибудь еще пытался реализовать отложенную загрузку таблицы с помощью прокруткиindex? Есть ли способ отследить индекс и выяснить, взаимодействовал ли пользователь с ним?

Спасибо!

1 Ответ

0 голосов
/ 18 июня 2011

После общения с несколькими друзьями из iOS, я нашел решение, которое работало достаточно хорошо.

Я настроил его так, чтобы в дополнение к иконкам, загружаемым из делегатов UIScrollView,Объект NSTimer будет периодически вызывать метод, который проверяет текущие видимые ячейки таблицы ([UITableView indexPathsForVisibleRows]) каждые 0,5 секунды и загружает все значки на экране, которые еще не были загружены, в одном отдельном потоке.

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

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

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