2010-12-07 63 views
0

在像iDraft和倒數第二的應用程序,它們執行索馬里發展事務處和重做操作得很好,沒有任何延遲。撤消在繪畫應用程序,如倒數第二和iDraft

我嘗試了很多方法。目前,我的測試應用程序使用[NSData writeToFile:atomically:]在每次撤銷之後直接將原始像素數據寫入文件,但我的延遲時間爲0.6秒。

任何人都可以提供一些提示嗎?

+0

看看我對這個帖子的回答http://stackoverflow.com/questions/4350715/iphone-trying-to-figure-out-the-drawrect/4350840#4350840 – Jaime 2010-12-07 04:08:20

回答

1

我不知道iDraft也不是倒數第二,但機會是他們有一個簡單的繪圖模型比你。在編寫繪圖應用程序時,您可以在兩個基本繪圖表示之間進行選擇:要麼跟蹤原始像素,要麼跟蹤線條,圓形等繪圖對象。 (或者,換句話說,你像素向量表示之間進行選擇。)

當繪製使用載體,你不跟蹤單個像素。相反,你知道在給定寬度,顏色和其他參數的點X和Y之間應該有一條線。當你要繪製這樣一個表示時,你可以調用Quartz來畫線。在這種情況下,模型(圖形表示)由幾個數字組成,佔用的內存很少,因此可以在內存中擁有多個版本的單個圖形,以便快速方便地進行撤銷和重做。

1

讓您的撤銷堆棧保存在內存中。不要爲每個操作寫入磁盤。無論您是否保留位圖或矢量,您的文件操作都不應該處於每次執行繪製操作的關鍵路徑上。

如果你的數據模型是完全位圖,只保留改變矩形的撤銷/重做。

0

正如前文所說,你也許並不需要將數據寫入到磁盤的每個操作,也是基於像素的情況下,除非你想撤消全屏幕過濾器的所有你需要保持是包含的數據在用戶執行的畫筆筆劃的邊界矩形內。

您可以雙倍緩衝您的繪圖,即在繪製之前保留圖像的副本,繪製到副本中,確定用戶操作的邊界矩形,從原始副本中保留適當的數據(使用大小和位置信息)。撤消時,您將該副本粘貼到修改的區域上。

這種方法延伸到重做,撤消上走,你將要重寫,並將其存儲區域。