CGContext的静态背景

时间:2011-07-14 13:33:47

标签: objective-c ios core-animation core-graphics cgcontext

这是我的第一个问题,大家好。我花了一些时间来解决以下问题并无法提出解决方案。如果有人能指出我正确的方向,我会很高兴。

我正在使用 CGContext 绘制实时数据的各种图形表示层,应该以至少50fps的合理帧速率刷新。我想使用静态图像作为背景。使用每个周期的上下文重新绘制此图像会显着降低帧速率。我想过只使用 UIImageView 来显示图像一次。这里的问题是我想使用 CGContext 提供的混合模式,以实现更复杂的叠加,而不仅仅是为每个图层设置一个alpha值。由于显示背景图像的 UIImageView 不是上下文的一部分,因此它不受混合模式的影响。有没有人知道如何在不影响帧速率的情况下实现所需的行为?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

使用与CGRect尺寸相同的CGContextDrawImage来调用CGImageRef的速度非常快。使用代码中的背景图像设置CGImageRef,其运行频率低于每个帧,例如视图的初始化代码。如果此背景图像正在更改,请在程序逻辑代码中构建映像,而不是绘制刷新代码。

您可以做的最糟糕的事情是每次都从文件中访问图像。通过不从较重的对象内访问CGImageRef可以节省一些时间。像[someUIImageObject CGImage]这样的调用会增加消息发送的开销,而在包含绘图代码的同一对象中访问CGImageRef类型ivar则不会。

如果您的源图片尺寸不合适,请先将其绘制到所需尺寸的CGImageRef一次,然后在绘图代码中重复使用。