2011-09-14 47 views
0

什麼是最好的?內存/性能交易問題?

我想處理約400個按鈕(按鈕有4個狀態)。 什麼是最好的?要爲每個按鈕存儲/顯示4個不同的OPAQUE圖像,或者從2 ALPHA MASKED png中拼寫狀態?

我知道這個問題有點模糊。 更多OPAQUE圖像,或更少,但ALPHA MASKED?

如果有任何經驗,請分享。

+0

恩,你實際上試圖同時顯示400個按鈕?這將使每個按鈕最大。 'sqrt((320 * 480)/ 400)= 20x20'。不要認爲這是真的有道理,是嗎? – elslooo

+0

:)分頁滾動。一次只能看到12個按鈕。 – Geri

回答

1

正如我之前提到的,我真的不認爲這是一個好主意(從用戶體驗的角度來看)。但是,如果您確實想要這樣做,則應該「增加一點點」來提高性能。

除了使用400(甚至400 * 4 = 1600UIView S(或UIButton s,這將基本上是在這種情況下一樣),你應該堅持一個子類UIView並覆蓋更快,緩存繪圖drawRect:方法。

您可以覆蓋touchesBegan ...,touchesMoved ...等事件來跟蹤觸摸事件。當用戶按下一個'按鈕'(實際上,它按下了你的單個視圖,但你可以測量它的按鈕),你更新一個單一的int-變量並且呼叫setNeedsDisplay重新繪製'按鈕'。

+0

非常感謝您的答案。當然,只有一次只能加載12 * 3按鈕。其餘部分將在滾動事件上加載。我正在使用自定義狀態訪問器實現drawRect方法,希望它足夠快。我打算在初始化時創建CGlayers,然後在狀態更改時重新繪製它們。再次感謝您的建議。 – Geri

+0

我建議只創建12個按鈕,並在必要時修改標籤。 –

1

這取決於你將在哪裏使用它們。如果我們正在談論靜態位置 - 使用alpha蒙版。在表格(以及任何滾動啓用的視圖)上,您需要首先檢查性能。

+0

是的,他們會滾動。我將在下面使用Tim的方法。謝謝你的建議。 – Geri

+0

順便說一下,我發現我的目的,使用子視圖使滾動更順利,然後繪製細胞(我認爲有關於細胞上7個子視圖的東西,其中4個按鈕,我必須補充一點,那就是我的細胞是相當大的不同高度 - 120至300像素。) – Ariel