2013-07-01 36 views
1

我想在iPad上顯示由許多小的綠色,紅色或黑色矩形組成的音頻測量儀。他們不需要花哨,但可能會有很多。我正在尋找最好的技術來快速繪製它們。以下哪種方法更好:CALayers或OpenGLES或其他文本地圖集?iOS最快的方式繪製許多矩形

謝謝您在問題因過於寬泛而關閉之前的答案。不幸的是,我不能縮小問題的範圍,因爲我不知道要使用哪種技術。如果我已經知道了答案,我本可以把這個問題縮小。

+0

有多少是很多? – AlexWien

+0

300米,每段8段,每秒更新5次。 – Ant

回答

1

推遲渲染到絕對必要的地步,即假設您使用CoreGraphics進行繪製,請使用路徑,並且只有在您將所有矩形添加到路徑時才執行筆畫/填充路徑。

+0

我真的不認爲OpenGLES的速度會是一個很大的問題,如果你只繪製矩形並且只有5fps。有一些可以在iPod Touch 4G上運行的iOS OpenGLES應用程序,可以實時分析音頻,同時讓動畫人物以60fps的速度跳舞到音樂。 – Totoro

+0

我認爲這是錯誤的。我畫了70條不同的線條,然後在最後撫摸它們。當我將其改爲70個單獨的筆畫時,速度加快了。 – Ant

2

重複繪製某些東西的最好方法是避免在屏幕上繪製它。由於音頻流量計經常更新,但其大部分區域保持不變,因爲音頻信號相對平滑,所以您應該跟蹤繪製的內容,並只繪製差異。例如,如果您在前一次更新中繪製了一個帶有五十個綠色方塊的信號計,並且現在需要繪製四十八個綠色方塊,則您只應重新繪製與先前更新不同的兩個方塊。這應該爲您節省很多石英電話。

+0

謝謝我已經假定。除了drawRect,還有什麼我應該看的? – Ant

+1

@Ant繪圖通常是最耗時的任務。在不分析代碼的情況下,很難添加更多內容。 – dasblinkenlight

4

最快的繪圖應該是在自定義視圖中使用OpenGLES。

+0

有沒有辦法確定它是否值得使用OpenGLES?給定2400個矩形的數字,每秒更新5次,您是否對OpenGLES是否有必要有所瞭解? – Ant

+0

考慮到所有的iOS繪圖最終都會在OpenGLES中完成,假設您使用API​​做了合理的工作,那麼自己應該始終加快速度。以上CALayer將是第二快。在OGL中,只有微小顏色的矩形應該很容易做到。我認爲任何超過100個物體的東西都應該在OGL中完成。但是,如果您可以先嚐試其他方法(並確保您在支持的最慢設備上進行測量),然後再進行比較。只是不要與模擬器進行比較。 – ahwulf

4

另一種方法是在CALayers中使用紋理圖集。您可以將9套您的箱子繪製到一張圖像中(0-8箱開始),然後在屏幕上創建300個CALayers,並將其作爲其內容。在每個幀中,您將每個圖層切換爲指向需要使用的紋理圖譜部分。我從來沒有在300層之前做過這個,所以我不知道這是否會成爲一個問題 - 我只用半數左右的數字來完成每一幀的處理,但是這樣做的確很有效 。看到這篇博客的更多信息:

http://supermegaultragroovy.com/2012/11/19/pragma-mark-calayer-texture-atlases/

+0

CALayer對此非常理想。這應該是非常快速(很大程度上是異步)。 –