2012-06-05 30 views
0

我是CGContext世界的新手。 我需要在NSMutableArray中創建一個CGContext(s)的堆棧。如何將CGContext狀態存儲在NSMutableArray中?

  1. 我有UIGraphicsBeginPDFContextToData

  2. 我傳遞這方面的方法作爲參數

    -(void) drawTo:(CGContextRef) context{}

  3. 首先我確定當前上下文中創建一個有效的PDFContext:

    CGContextRef curCon = context;

  4. 的NSLog值:

    context:<CGContext 0x6b79d60>

  5. 然後我試圖使當前上下文的副本:

    CGContextRef conCopy = UIGraphicsGetCurrentContext();

  6. 然後我把它添加到我的NSMutableArray:

    [myMutableArray* addObject:(id)conCopy];

  7. 然後我列出的NSMutableArray的內容:

    after an object added:<__NSArrayM 0x6b7e850>(<CGContext 0x6b79d60>)

而且我看到的附加值是最初發送給此方法作爲參數,而不是複製相同的上下文。

我在這裏錯過了什麼?或者也許不可能將當前上下文的狀態存儲在NSMutableArray中?我明白路徑不會被保存,沒關係。我需要保存任何關於可以保存的當前上下文的所有內容。 謝謝!

回答

2

你不能直接這樣做。但是你想要解決什麼是真正的問題? CGContextSaveGState()可以滿足您的要求,但僅限於當前上下文的範圍內。 CGLayer可以有效地創建您可以隨身攜帶的上下文(儘管您仍然無法序列化它們)。

如果您的真正目標是以可複製的形式保存非路徑狀態,則可以通過調用所有CGContextGet...方法並存儲其結果來創建可複製對象。然後你可以撥打CGContextSet...來創造一個新的環境。這很乏味,但不應該很難。 (雖然它確實提出了爲什麼這樣的問題,但感覺像是一件很奇怪的事情。)

+0

謝謝。我想我現在只使用CGContextSaveGState(),因爲我現在只使用一個上下文。 – TrekOnTV2017

0

UIGraphicsGetCurrentContext沒有創建副本。返回的上下文是使用UIGraphicsBeginPDFContextToData創建的。

+0

謝謝。你知道是否有辦法制作它的副本並將其存儲在NSMutableArray中?或者如果不是副本,那麼從它的狀態信息 – TrekOnTV2017

相關問題