【问题标题】:UICollectionView poor scrolling performance with simple UICollectionViewCellUICollectionView 使用简单的 UICollectionViewCell 滚动性能不佳
【发布时间】:2012-12-03 12:31:11
【问题描述】:

我正在使用 UICollectionView 在 iPad 中显示基于网格的视图。我在屏幕上一次只有 200 个(20 行 x 10 列)单元格,每个单元格只包含一个 UILabel。它在滚动时开始变慢,并且不像在 TableView 中那样平滑。

我不知道滚动性能变慢的原因。我该如何改进?

提前致谢!


我有 3 个集合视图,但主要内容 uicollectionview 是已标记为 2 的那个。这是我的代码

if (collectionView.tag==0) { //This tagged collection view is for Left side selection box

    LeftSelectionBoxItem *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"SelectionCell" forIndexPath:indexPath];

    return cell;
}
else if (collectionView.tag==1){ //This tagged collection view is for to show column names

    TopColumnItem *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ColumnCell" forIndexPath:indexPath];
    cell.columnName.text = [NSString stringWithFormat:@"%@",[self.columnNames objectAtIndex:indexPath.item]];

    return cell;
}
else if (collectionView.tag==2) { //This tagged collection view is for to show main content

    GridItem *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"GridCell" forIndexPath:indexPath];
    cell.dataLabel.text = [NSString stringWithFormat:@"%@",[[self.dataModel objectAtIndex:indexPath.section] objectForKey:[self.columnNames objectAtIndex:indexPath.item]]];

    return cell;
}
else {
    return nil;
}

【问题讨论】:

  • 如果可能,请在“- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath”中发布您所拥有的内容

标签: scroll uicollectionview performance


【解决方案1】:

拥有很多 UILabel 有时会很昂贵。尝试将它们更改为 CATextLayers,因为它们的开销要少得多。请注意,如果您这样做并使用光栅化,则需要告诉图层也为视网膜显示设备进行光栅化。

【讨论】:

  • 我为您描述的布局创建了一个简单的模型,每个单元只有 30 个单元和 2 个 CALayers。我有三种不同的单元格类型(主要只是改变了 CALayers 的位置),我注意到你提到的性能问题。当我在每个单元格中只有 1 个 CATextLayer 并且只有一种类型的单元格时,我没有注意到任何性能问题。我想知道是否有多种类型的细胞会导致这种情况?
  • 先谢谢你,我会尝试你的建议并告诉你。
  • 另外,如果您的单元格有圆角或阴影,它们也会有严重的性能问题。 UICollectionViews 和 UITableViews 都有这个问题,因为它们需要在重新进入屏幕时重新渲染对象(整个 dequeueReusableCellWithReuseIdentifier 事情)。
  • 不确定您是否还在研究这个问题,但我注意到的另一件事是在使用之间移动单元格内部的项目的逻辑可能会导致巨大的性能问题。例如,我创建了一个带有一个重用标识符的 UICollectionView。每个单元格只有文本,但我把它放在单元格中不同大小的不同位置(左、右、上、下)。与其这样做,不如创建 4 个具有自己特定布局和自己的重用标识符的不同单元格显着提高了性能。
  • 对不起,我还没有尝试 CATextLayer,因为我现在除了提高性能还有其他优先事项。但我肯定会在应用程序准备好启动之前尝试我们的想法。关于单独的重用标识符,我和你一样做了。:-) 再次感谢!
猜你喜欢
  • 1970-01-01
  • 2022-12-21
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多