Прогрессивная загрузка изображений в UITableView - PullRequest
1 голос
/ 15 марта 2010

Я занимаюсь разработкой на iPhone, и я увидел в AppStore, что изображения постепенно загружаются в UITableView ... Как я могу это реализовать? Моя идея состояла в том, чтобы обнаружить показанный контент (какие ячейки показаны) и загрузить эти изображения. Моя проблема в том, что я не знаю, как обнаружить показанные клетки! Это хороший способ сделать это?

Лучший

Ответы [ 6 ]

3 голосов
/ 15 марта 2010

То, как это было продемонстрировано на iPhone Tech Tech Talk, заключалось в использовании NSOperation и NSOperationQueue.

Идея состоит в том, чтобы обернуть ваш запрос на загрузку изображения (используя NSURLRequest) в операцию NSO.

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

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

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

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

1 голос
/ 16 марта 2010

Я бы реализовал каждую ячейку как подкласс UITableViewCell, а затем переопределил willMoveToWindow: метод в подклассе. willMoveToWindow: вызывается, когда вид ячейки становится видимым на экране или когда он выходит за пределы экрана (newWindow получает nil). Затем каждая ячейка может поставить в очередь запрос на загрузку своего изображения, когда оно станет видимым (и, возможно, даже отменить свой запрос в очереди, если он выйдет за пределы экрана).

Кстати, вы можете использовать visibleCells свойство UITableView, чтобы получить список видимых ячеек.

1 голос
/ 15 марта 2010

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

0 голосов
/ 06 марта 2012

Пожалуйста, перейдите по этой ссылке и попробуйте интегрировать загрузку Lazy Table View, вы можете получить свой вывод, http://www.cocoaintheshell.com/2011/05/progressive-images-download-imageio/ изменить URL в ProgressiveImageDownloadViewController в методе нажатия кнопки Download.

0 голосов
/ 06 декабря 2010

Это называется LazyTableView ... Вы можете получить учебник здесь

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html

0 голосов
/ 15 марта 2010

@ Jasarien: хороший ответ

Или вы можете использовать проект three20, если хотите. есть TTTableViewController, который уже обрабатывает все, что вы хотите. Вам нужно только ввести URL-адрес изображения и альта.

TT также кэширует ваши изображения в памяти или на диске.

посмотрите пример проекта в комплекте с тремя ресурсами gitbub. есть пример.

...