У меня есть 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, список альбомов с художественными свитками, такими как шелк, так что, очевидно, мне чего-то не хватает.