我有我的這個應用程序,其中包含一個部分,將允許用戶在屏幕上做簡單的繪畫。我的想法是提供兩種繪畫:粗糙和平滑(更加卑鄙)的線條。iPhone - 試圖找出drawRect:
它是如何構建的:我有一個自定義drawRect方法的透明UIView。我不確定我是否完全理解drawRect,但代碼部分工作。
工作原理:用戶在屏幕上移動手指。當他第一次觸摸屏幕時,TouchesBegan會創建一個名爲myPoints的可變數組,並存儲第一個點的座標並保存畫布(以允許撤消)。
之後,TouchesMoved例程抓取所有點並將它們添加到myPoints。在用戶選擇繪製貝塞爾線的情況下,需要此數組。
當檢測到touchesEnded時,應用程序必須查看用戶是否正在繪製常規線(粗糙)或貝塞爾曲線。如果不是更加困難,這些線條已經被繪製出來了。如果需要一個貝塞爾曲線,我需要擦除畫布,恢復畫布,就像TouchesBegan存儲它時一樣,計算新的貝塞爾近似(反向設計成最適合貝塞爾曲線以適合繪製的點)並繪製新曲線,取代粗糙的一個。
這些是我的問題:
1)如何存儲撤消?我首先想到創建一個新的圖層來存儲撤消,但這樣做會將應用程序內存使用量從8 Mb增加到13 Mb ......我不確定這是否是安全的使用級別(該應用程序與3GS兼容,iPod觸摸2nd G,包括iPad)。然後,我決定啓動一個隊列操作來保存畫布。這會導致保存空白圖像(我認爲保存方法對於上下文而言是無效的,因爲它無法獲取drawRect之外的上下文)。
2)第二個問題與第一個類似。此時我需要將畫布恢復到保存時的狀態,但由於恢復方法在drawRect之外,因此它也無法使用上下文。
TouchesBegan,TouchesMoved和TouchesEnded以及所提及的所有方法都在drawRect所在的同一類中,而不在viewController中。
我的問題是:你們會怎麼做?
我在商店看到一款繪畫應用程序,提供多級撤消。我無法想象他們是如何做到這一點的,因爲在我第一次嘗試的時候,因爲我創建的圖層消耗了5 Mb的內存,所以看起來不可能有那種類型的內存...
please,help me .. 。 我很絕望!
感謝
(是的,帆布我指的是圖像)......這個問題是橡皮擦。用戶可以手指擦除部分物體。如果用戶擦除部分線(已存儲的點),我將不得不重新創建擦除。這不是愚蠢的嗎?這些物體會被完全或部分地反覆繪製和擦除,直到獲得最終的圖像爲止。我不認爲這將是最好的選擇。 – SpaceDog 2010-12-03 23:38:17
實際上,擦除只是集合中的另一個繪圖對象,但使用背景顏色(也可能與之不同)...只需在集合中重新創建圖像時(即刪除最後一項)所有其他操作保存在西蒙娜可見圖像 – Jaime 2010-12-04 03:42:50