2014-04-19 100 views
0

在視圖的drawRect中呈現大量路徑的最佳方式是什麼< 512?在drawRect中繪製大量的路徑

我想繪製到512,2個像素寬的段實時,我不知道如何以最高的性能做到這一點。

將所有這些段創建並繪製爲BezierPath或多個bezierPaths的速度不夠快。

我已經讀過CGLayers可以使用並呈現到目標UIView。

從視圖環境中建立層,並用自己的上下文別處寫入層後,該層可被吸入觀點與

CGContextDrawLayerAtPoint(context, point, layer); 

如果事情不斷在圖層繪製時應該它通過setNeedsDisplay通知UIView並且它們可以保持同步?例如而無需將setNeedsDisplay分派給主線程(這感覺不對)。

一旦優化完成後,在圖層中渲染如此多的路徑/線條的最佳方式是什麼?

+0

貝塞爾路徑是靜態的嗎?如果是這樣,一種方法是在init中創建一次路徑,然後drawRect在需要時使用它們而不重新創建。標題現在逃脫我,但有一個關於優化繪圖,剖析等的wwdc 2012視頻。 –

回答

0

,如果你想成爲真快,使用OpenGL ES),否則,有一些普遍的考慮:

  1. 做盡可能少重複的工作成爲可能。例如。如果在渲染之間有200個背景多邊形保持不變,則將它們渲染爲UIImage,並在您的-drawRect方法的開始處繪製該UIImage。避免像if(array.count < 3) { y += array.count } else { y += 3 }這樣的事情,因爲int array_count = array.count; if(array_count < 3) { y += array_count } else { y += 3 }更快!好的,在這種情況下,沒有太大的區別,但在很多情況下,這些事情都很重要!避免在內部循環中創建太多的對象。
  2. 使用CADisplayLink
  3. 剖析你的代碼,看看瓶頸在哪裏。他們是在繪圖代碼中,還是在計算多邊形的代碼中?