UITableview + изображения из библиотеки ipod, обеспечивающие прерывистую прокрутку.Есть ли обходные пути? - PullRequest
0 голосов
/ 13 марта 2012

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

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

  • сначала была ячейка из пера с изображением и двумя метками
  • чтобы исправить странное масштабирование в просмотре изображений, я добавил просмотр изображений в пользовательский просмотр, чтобы обрезать его (никакого реального снижения производительности).
  • загрузил изображение без какой-либо пост-обработки, все еще с дрожанием.
  • реализовал ячейку в - (void) drawRect (как в примере с Apple TableViewSuite # 5), передав изображение из таблицы. Первоначально это было только загрузка первых ~ 8 изображений, и производительность была только слегка заикалась.
  • Затем я установил [myCell setNeedsDisplay], чтобы он перерисовывал ячейку, чтобы все остальные изображения отображались правильно, и производительность снижалась. Я также попытался перерисовать только часть изображения без изменений.
  • этот метод только с одним статическим изображением дал превосходную производительность.

Я удостоверился, что все обычные вещи, такие как cellIdentifier и т. Д., Верны, и, если представление ячейки содержит только текст, оно прекрасно прокручивается.

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Cell initizalation
static NSString *CellIdent = @"CellIdent";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdent];
if (cell == nil) {
    cell = [[UITableViewCell alloc]
            initWithStyle:UITableViewCellStyleSubtitle
            reuseIdentifier:CellIdent];
}

cell.imageView.image = [[[[albumList
                       objectAtIndex:indexPath.section]objectAtIndex:indexPath.row] valueForProperty:MPMediaItemPropertyArtwork]imageWithSize:CGSizeMake(0,56)];
//it seems to scale with a sharper image if CGSizeMake has a value, rather than 
//CGSizeZero. It doesn't actually do any scaling at this point, which I initially thought
//it would, but the results were more what I wanted so...

return cell;


}

В приложении Apple для iPod, список альбомов с художественными свитками, такими как шелк, так что, очевидно, мне чего-то не хватает.

1 Ответ

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

Этот ответ поможет:

Трюки для повышения производительности прокрутки iPhone UITableView?

Обратите особое внимание на шаг 3:

Нарисуйте все в drawRect UITableViewCell: по возможности избегайте подпредставлений любой ценой (или, если вам требуется стандартная функциональность доступности, представление содержимого drawRect:)

пример:

- (void)drawRect:(CGRect)rect {
   [yourImage drawAtPoint:CGPointMake(0,0)];
}

Вы можете найти образец приложения от Apple, иллюстрирующий увеличение производительности, если нарисовать изображение самостоятельно:

https://developer.apple.com/library/ios/#samplecode/AdvancedTableViewCells/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009111

Если вы хотите, чтобы полные и ясные объяснения, взгляните на этот сеанс WWDC, который подробно описывает UITableViewPerformance:

https://developer.apple.com/videos/wwdc/2010/?id=128

...