2

我正在为我的 iOS5 应用程序创建许多 CGLayer,如下所示:

layer_1 = CGLayerCreateWithContext (context,self.bounds.size, NULL);    
offlineContext_1 = CGLayerGetContext (layer_1);
layer_2 = CGLayerCreateWithContext (context,self.bounds.size, NULL);    
offlineContext_2 = CGLayerGetContext (layer_2);
layer_3 = CGLayerCreateWithContext (context,self.bounds.size, NULL);    
offlineContext_3 = CGLayerGetContext (layer_3);

对于计时器的每一步,我都会绘制到offline_contexts,当所有的绘制完成后,我会通过调用将所有层收集到一个中:

CGContextDrawLayerAtPoint (context, CGPointZero, layer_1);
CGContextDrawLayerAtPoint (context, CGPointZero, layer_2);
CGContextDrawLayerAtPoint (context, CGPointZero, layer_3);

这很好用。第 1 层的内容似乎被第 2 层的内容覆盖,然后第 3 层覆盖了前两层。所有绘图都是使用如下调用完成的:

    CGContextAddArc(context,cx,cy,radius,-fromDir,toDir,1-curve);

出于性能原因,我用图像替换了很多像上面这样重复的绘图命令,这样结果应该是相同的,但不是绘制 CGContextAddArc() 20 次,而是告诉图像自己绘制 20 次:

[myArcImage drawAtPoint: loc];

然而,随着这一变化,叠加的顺序似乎发生了变化。图像最终会被绘制到集体视图中,但只有那些不覆盖绘制到其他上下文的其他线条和弧线的图像部分。我玩过在 drawAtPoint 变体中使用混合,但这只会影响图像中可见的部分。

关于为什么线条和弧线覆盖其他图层中的内容但图像没有的任何想法?

非常感谢

4

1 回答 1

1

好吧,我明白了我在做什么。我正在绘制的弧线和线条类似于上面的 CGContextAddArc() 调用,并且该调用将要绘制的上下文作为参数。当我切换到绘图图像时,drawAtPoint() 方法不会将上下文作为参数。相反,它将图像绘制到当前上下文,在我的例子中是当前 UIView 的上下文。

我的问题的解决方案是用 push/pop 上下文调用包装 drawAtPoint 调用:

UIGraphicsPushContext(correct_context);
[myArcImage drawAtPoint: loc];
UIGraphicsPopContext();
于 2012-06-08T18:26:41.943 回答