尝试使用自定义布局进行屏幕外UICollectionViewCells预渲染

时间:2014-02-20 06:28:39

标签: ios objective-c ipad uicollectionview uicollectionviewlayout

我有一个分页的UICollectionView,每页有一个单元格。但是,我的UICollectionViewCells渲染速度很慢(第三方库,没有选项)。因此,作为优化,我需要将单元格预渲染到当前页面的左侧和右侧,因此滚动是平滑的。

我所做的是,在我的自定义UICollectionViewLayout中,在检查要查看应返回哪些单元格的UICollectionViewLayoutAttributes之前,将传递的矩形开始1点,请参见此处:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect {
    CGRect outsetRect = CGRectInset(rect, -1, 0);
    return [_myAttributes filter:^BOOL(UICollectionViewLayoutAttributes *attribs) {
        return CGRectIntersectsRect(attribs.frame, outsetRect);
    }];
}

这可以按预期工作。然而,当实际的UICollectionView做了它的事情时,它似乎忽略了屏幕外的单元格并仅为第一个单元格调用cellForItemAtIndexPath,而不是向右(或左)单元格调用。{/ p>

任何想法是怎么回事?感谢

1 个答案:

答案 0 :(得分:1)

为了将来参考,我通过以下方式解决了这个问题:

  • 使预渲染的单元格在屏幕上强行移动一点,但尺寸相同。
  • 将z-index更改为-1,使它们位于主页面单元格下。
  • 在layoutAttributesForElementsInRect中,检查rect是否是两页宽,如果是,那么它是否在页面之间滚动,所以不要抓取任何额外的页面
  • 在我的手机的applyLayoutAttributes中,我检查z-index是否<0,如果是,那么这是一个预渲染单元格。

干杯

相关问题