0

我是 CGContext 世界的新手。我需要在 NSMutableArray 中创建一堆 CGContext(s)。

  1. 我有一个使用 UIGraphicsBeginPDFContextToData 创建的有效 PDFContext

  2. 我将此上下文作为参数传递给方法

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

  3. 首先,我通过以下方式确定当前上下文:

    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 中?我知道路径不会被保存,这很好。我需要保存有关可以保存的当前上下文的所有内容。谢谢!

4

2 回答 2

2

你不能直接这样做。但你要解决的真正问题是什么?CGContextSaveGState()做你所要求的,但只在当前上下文的范围内。CGLayer可以有效地创建您可以随身携带的上下文(尽管您仍然无法序列化它们)。

如果您的真正目标是以可复制的形式保存非路径状态,那么您可以通过调用所有CGContextGet...方法并存储它们的结果来创建可复制对象。然后你可以调用CGContextSet...他们来创建一个新的上下文。这很乏味,但应该不难。(虽然它确实提出了为什么的问题。这感觉像是一件很奇怪的事情。)

于 2012-06-06T00:26:11.997 回答
0

UIGraphicsGetCurrentContext不创建副本。返回的上下文是您使用创建的UIGraphicsBeginPDFContextToData

于 2012-06-05T19:26:53.123 回答