来自ipod库的UITableview +图像产生不连贯的滚动。有变通方法吗?

时间:2012-03-12 20:28:36

标签: objective-c uitableview mpmediaitemcollection

我有一个UITableView正在从MPMediaQuery加载一个Albums列表。一切都运转良好,直到我注意到一张非方形专辑封面的专辑正在推动内置单元格视图的标签文本向右移动。注意到这是我的垮台,因为在这个过程中我也注意到滚动不太顺利。

我从笔尖制作了一个细胞,解决了定位问题,但性能仍然受到影响。在这一点上,我开始进行大量的研究,并尝试一切能力来实施。

  • 首先是来自nib的带有imageview的单元格和两个标签
  • 为了校正imageview中的奇怪缩放,我在uiview中添加了imageview来裁剪它(没有真正的性能影响)。
  • 加载图像时没有任何后处理,仍然是抖动的表现。
  • 在 - (void)drawRect中实现了单元格(就像Apple的TableViewSuite示例#5中的示例一样),从tableview传递图像。这只是最初只加载了前8张图像,性能只是略有结果。
  • 然后我设置[myCell setNeedsDisplay]让它重绘单元格,这样所有其他图像都能正确显示,性能又回落了。我也尝试过只重绘图像部分而不做任何改动。
  • 此方法只有一个静态图像,可以产生完美的性能。

我确保像cellIdentifier等所有正常的东西都是正确的,如果单元格视图只有文本,它会完美滚动。

下面找到tableviewcell的一个实现,使用一个默认的单元格视图来说明我当前如何抓取单元格的图像:

- (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 :(得分:0)

这个答案将有所帮助:

Tricks for improving iPhone UITableView scrolling performance?

特别注意第3步:

在UITableViewCell的drawRect中绘制所有内容:如果可能的话,不惜一切代价避免子视图(或者如果你需要标准的辅助功能,那么内容视图的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

如果您想要完整而清晰的解释,请查看详细介绍UITableViewPerformance的WWDC会话:

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