2014-03-07 26 views
3

我正在開發一個iOS應用程序,它使用UICollectionView來實現像普通日曆應用程序這樣的模塊。日期單元的背景顏色根據日期更改(這不重要)。該單元與dequeueReusableCellWithReuseIdentifier方法重用。但是,當日歷時間日曆非常緩慢。我搜索了這個問題,並整天在stackoverflow中搜索它,但找不到完美的答案。如何提高UICollectionView的性能?讓它滾動平滑

+0

它在實際設備上還是在模擬器上運行緩慢?其實對我來說,它在模擬器上出於某種原因很糟糕,但是滾動在設備上非常流暢。 'UICollectionView'旨在重用它的單元格,所以這本身就意味着良好的滾動性能。 – dariaa

回答

1

首先要檢查的是您的細胞正在被正確地重新使用。如果不是這樣,當它們從xib實例化時,會有相當大的開銷(特別是對於複雜單元格)。

執行此操作的一種簡單方法是在您的單元格子類中實現-prepareForReuse方法,並在該消息中實現NSLog。每當單元格滾動屏幕時,您應該看到此方法被觸發。如果它沒有發射,你的細胞不會被重新使用。

有些人報告過類似的問題,可能是iOS 7中的一個bug。請參閱hereherehere

3

許多事情會導致滾動性能下降。您可能需要縮小範圍併發布一些代碼。幾個常見錯誤:

  • 將數據加載到單元格時重新創建所有子視圖。您應該爲每個單元格實例創建一個子視圖,並且只需清除其狀態prepareForReuse
  • 重新使用單元格時刪除並重新添加自動佈局約束。如果您需要修改基於數據的自動佈局約束,修改現有約束條件的常量值要比刪除並重新添加要快很多
0

通常它有助於確保所有細胞是不透明的。在單元圖層上將shouldRasterize設置爲YES(不要忘記設置rasterizationScale)。

我也注意到NSDate操作可能很慢。因此,如果你使用循環做某件事情並且每天增加nsdate,那麼你可能只需從i = 1循環就可以提高性能;我< = numberOfDaysInTheMonth。