0

我畫的內容,以一個UITableViewCell,它運作良好畫畫,但我想了解是否有這樣做的更好的方法。上優化的UITableViewCell

每個單元具有以下組件:

  • 縮略圖在左側 - 因此它被加載異步
  • 標題字符串可能來自服務器 - 可變長度,從而每個小區可以是不同的高度
  • 時間戳字符串
  • 漸變背景 - 漸變背景 - 漸變從單元格的頂部到底部,並且是半透明的,以便背景色以光澤閃耀

目前運作良好。發生附圖如下:

  • 的UITableViewController inits /重用的小區,需要的數據集,並調用

    [細胞setNeedsDisplay]

  • 該單元具有用於縮略圖一個的CALayer - thumbnailLayer

  • 在單元格的drawRect中繪製了漸變背景和兩個字符串

  • 單元格的drawRect然後調用setIcon - 它獲取縮略圖並將圖像設置爲thumbnailLayer的內容。如果在本地找不到圖像,它會將加載圖像設置爲thumbnailLayer的內容,並異步獲取縮略圖。一旦縮略圖被接收,它被再次&調用重置的setIcon重置thumbnailLayer.contents

這所有當前的工作,但使用儀器我看到縮略圖與梯度合成。我曾嘗試以下解決這個問題:

  • 細胞的backgroundView設置,其的drawRect提請梯度,使得細胞的drawRect可以借鑑的縮略圖,並使用setNeedsDisplayInRect可以讓我以後只重繪縮略圖視圖它加載---但是這導致了backgroundView的繪圖(漸變)覆蓋單元格的繪圖(文本)。

  • 我只是在單元格的drawRect中繪製縮略圖,但是當setNeedsDisplay被調用時,drawRect會重疊另一個圖像,並且加載圖像可能會顯示。我會清除矩形,但是我必須重繪漸變。我想嘗試在CAGradientLayer中繪製漸變並存儲對它的引用,所以我可以快速重繪它,但我想如果單元格的高度發生變化,我將不得不重繪漸變。

任何想法?我確定我錯過了一些東西,所以任何幫助都會很棒。

凹凸 - 任何人有任何想法?

回答

0

我開始使用setNeedsDisplayInRect。我仍然繪製drawRect中的所有東西,但是當我這樣做時,我檢查了需要繪製的矩形並僅更新該矩形。我還使用CGLayers繪製並保存爲ivars。當我需要重繪未改變的部分時,我使用存儲的CGLayer。縮略圖不再是CALayer。對於繪圖選擇,我將不得不使用selectedBackgroundView並重用我的CGLayers。

0

UIView和CALayer都有一個不透明屬性。任何時候你可以將它設置爲YES,就不會有合成,繪圖將會更快。如果您的縮略圖圖像沒有透明度,那麼它是理想的候選人。