2012-12-13 67 views
1

我創造了實踐的應用程序是一個簡單的繪圖應用程序。用戶沿着屏幕拖動他/她的手指,並以100px x 100px的正方形着色。太多UIViews原因滯後

我目前通過創建在用戶點擊一個新的顏色的UIView實現這一點,那就是工作。但是,經過一段時間的着色之後,會有相當大的滯後,我相信這是由於UIViews太多而成爲主視圖的子視圖。

哪有我,和其他人誰上用手指拖動減少滯後根本沒有,不管有多少UIViews有同樣創造UIViews。我也認爲這也許是不可能完成的任務,那麼像我這樣的人怎麼會在屏幕上拖動的手指上的主視圖中以上述尺寸的立方體着色?

我知道這可能看起來像一個特定的問題,但我相信它可以幫助他人理解如何減少滯後,如果有大量的UIViews,其中性能降低選項可用性較低。

回答

2

一種方法是將每個正方形繪製成圖像並顯示該圖像,而不是圍繞的UIView保持爲每個正方形。

但是,如果您的繪圖足夠簡單,則可以使用OpenGL來完成此操作,速度要快得多。你應該看看蘋果的GL Paint Sample Code,它顯示瞭如何在OpenGL中做到這一點。

如果您的圖紙是OpenGL的太複雜了,你可以創建,例如,CGBitmapContext,得出每平方米到這方面,當用戶拖動手指。每當你抓一個新的平方成位圖,你可以把位圖轉換成圖像(通過CGBitmapConxtextCreateImage),並顯示圖像的一個UIImageView。

0

我認爲你要找的是UIView的drawRect:方法。你可以創建你自定義的UIView(你已經可以使用它)並重寫drawRect方法並在那裏做繪圖!您必須將繪圖保存在數組或其他容器中,並在陣列內容更改時調用setNeedsDisplay方法。

+1

雖然你不會自己調用drawRect,但是,對嗎?你想要setNeedsDisplay。 –

+0

謝謝!你是對的。調用setNeedsDisplay或setNerdsDisplayInRect會更好:如果你沒有問題,只需在下一個繪圖週期中更新即可。 – SIGKILL

1

有兩件事情,我想起:

1-使用儀器工具來檢查您是否泄露任何內存

2 - 如果你是剛剛着色的意見,而不是比創建圖像他們每個人要麼設置UIView的背景顏色屬性,要麼覆蓋drawRect方法來執行自定義繪圖

+0

我在着色中着色。但是,我如何將手勢識別器的觸摸座標傳遞給drawRect?謝謝 –