2012-08-06 92 views
1

我正在創建繪圖應用程序並遇到問題。我有一組曲線;每條曲線保持一個點陣列,每個點保持其顏色,厚度和座標。我調用了drawRect:,我重繪了這個數組中的所有曲線。問題是這個數組越來越大,應用程序變慢。將當前繪製的視圖保存爲圖像

我的想法是,在每次重繪結束時,將當前上下文保存爲圖像,釋放曲線數組,然後在下一次重繪時使用該圖像作爲背景。最終,我根本不需要曲線數組,只需要一組正在進行的曲線。這可能嗎?或者也許有另一種方式來做到這一點?

回答

0

您可以將視圖的相應圖層渲染爲要在下一次迭代中更新的圖像。確保在這種情況下使用UIImageView作爲您的ViewToSaveAsImage更好。在這種情況下,你可以讓這個過程更容易...

UIView *view = yourViewToSaveAsImage; 

UIGraphicsBeginImageContext(view.bounds.size); 
[view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

我是對的,我只需要添加UIGraphicsGetImage ...如果我已經設置了上下文等? – Mathemage 2012-08-07 00:15:22

+0

如果你的意思是drawRect - 是的。但是,如果你的視圖是UIImageView的一個實例,你將可以免費獲得這個圖像 – voromax 2012-08-07 00:49:02

0

一個路徑只包含點信息,所以如果你想跟蹤渲染的變化,你需要一個單獨的對象列表。

我通過創建自己的自定義對象的NSArray*實現這一點,包括領域,如:一個NSBezierPath*(捕捉點和簡化繪製段),一個CGPathDrawingMode使用該段,並在顏色信息和線大小。

然後,當我繪製,我遍歷數組的元素,設置上下文的當前顏色,並調用任一strokefill上當前元素的NSBezierPath*取決於我如何配置了段。

我也想知道如果有更快的方法,但這種方法當然運作良好。

+0

是的我正在做同樣的(幾乎)。我添加行數後,性能變慢:s – Mathemage 2012-08-07 00:00:02

+0

我沒有爲每行創建一個元素;只要一條線連接到相同顏色,線條寬度等的另一條線上,我將所有這些片段合併爲一個「NSBezierPath *」。另外,我不保存一行代碼;路徑和數組長度可以用來推斷它。 – 2012-08-07 00:02:12