2012-03-09 5 views
0

У меня есть приложение для iPad. И у меня есть uitableview, в котором каждая ячейка имеет от четырех до пяти изображений. И почти четыре-пять ячеек на экране.Как ускорить работу табличного представления со многими изображениями?

Таким образом, на экране имеется около 20 ~ 30 изображений.

Изображения не очень большой, возможно, 200 * 200. (Уже какой-то thunbnail)

Все изображения являются локальными ресурсами.

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

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

Итак, мой вопрос в том, как с этим бороться?

1. Сделайте как можно меньше миниатюр?

2.Pre нагружать некоторое изображение

3.Use пользовательский кэш (также как?)

ответ

0

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

+0

Асинхронная загрузка будет лучше подходить. Я использую это в своем приложении и отлично его. – Bharathi

+0

Я полностью согласен, однако иногда простейшая вещь, которая делает эту работу лучше) – sigman

1

Я бы порекомендовал вам получать изображения с помощью GCD. Я бы также подклассифицировал UITableViewCell и в нем drawRect: нарисовал все снимки на уровне представления. Это значительно увеличит вашу производительность.

+0

На самом деле, мой опыт UIImageViews лучше всего подходит для рисования изображений в виде таблицы, особенно когда это миниатюры. Я где-то читал, что UIImageView использует GPU, где drawRect (т. Е. CoreGraphics) использует CPU. – samvermette

+0

это правильно, но слияние четырех изображений вниз с одним, что также нарисовано на уровне представлений, является повышением производительности. Я создаю нечто подобное только сейчас, и я нашел 'CGContextDrawImage()' быстрее, чем '[imageView.layer renderInContext:]'. Но это только если вы хотите нарисовать все изображения в одном слое. – Simon

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