2

我有一個分頁的UICollectionView,每頁一個單元格。但是,我的UICollectionViewCells渲染緩慢(第三方庫,沒有選項)。所以作爲一個優化,我需要預先渲染單元格到當前頁面的左側和右側,所以滾動是平滑的。試圖使用屏幕上的UICollectionViewCells預渲染使用自定義佈局

我所做的事情是,我的自定義UICollectionViewLayout內,由1點檢查,看看哪些細胞的UICollectionViewLayoutAttributes應返回前開始傳遞RECT,在這裏看到:

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

可正常工作。但是,當實際的UICollectionView執行它的操作時,它看起來會忽略屏幕外單元,並且僅針對第一個單元,而不是右側(或左側)的單元調用cellForItemAtIndexPath

任何想法是怎麼回事?由於

+0

選項我正在考慮是:細胞是屏幕外,返回其COORDS,儘管它們是在屏幕上,與把他們的主要「可見的」細胞背後的z-index。 – Chris

回答

1

以供將來參考,我解決了這個由:

  • 使細胞預先繪製屏幕上的一個小強行移動,但具有相同的尺寸。
  • 將它們的z-index更改爲-1,以便它們位於主頁面單元格下方。
  • 在layoutAttributesForElementsInRect,檢查RECT是兩頁紙,如果是的話那麼它的頁面之間滾動,所以不搶任何額外的頁面
  • 在我的手機的applyLayoutAttributes,我檢查的z-index < 0 ,如果是這樣,那麼這是一個預渲染單元。

乾杯

相關問題