gpt4 book ai didi

ios - 透明度和 CGLayers

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:00 24 4
gpt4 key购买 nike

我正在为我的 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 层的内容 overdraw ,然后第 3 层覆盖前两层。所有绘图都是使用如下调用完成的:

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

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

[myArcImage drawAtPoint: loc];

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

关于为什么直线和圆弧覆盖其他层中的内容但图像不覆盖,有什么想法吗?

非常感谢

最佳答案

好吧,我突然意识到我在做什么。我绘制的弧线和线类似于上面的 CGContextAddArc() 调用,该调用将要绘制的上下文作为参数。当我切换到绘制图像时, drawAtPoint() 方法没有将上下文作为参数。相反,它将图像绘制到当前上下文,在我的例子中是当前 UIView 的上下文。

我的问题的解决方案是用推送/弹出上下文调用包装 drawAtPoint 调用:

UIGraphicsPushContext(correct_context);
[myArcImage drawAtPoint: loc];
UIGraphicsPopContext();

关于ios - 透明度和 CGLayers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10937263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com