这是我的第一个问题,大家好。我花了一些时间来思考以下问题,但无法提出解决方案。如果有人能指出我正确的方向,我会很高兴。
我正在使用 CGContext 绘制实时数据的各种图形表示层,这些数据应该以至少 50fps 的合理帧率进行刷新。我想使用静态图像作为背景。在每个循环中使用上下文重新绘制此图像会显着降低帧速率。我考虑过只使用 UIImageView 显示一次图像。这里的问题是我想使用 CGContext 提供的混合模式来实现更复杂的叠加,而不仅仅是为每一层设置一个 alpha 值。由于显示背景图像的 UIImageView 不是上下文的一部分,因此它不受混合模式的影响。有谁知道如何在不影响帧速率的情况下实现所需的行为?感谢您的帮助。
最佳答案
使用与 CGRect 尺寸相同的 CGImageRef
调用 CGContextDrawImage
速度很快。在代码中设置一个 CGImageRef
和背景图像,这些代码的运行频率低于每一帧,例如 View 的初始化代码。如果此背景图像发生变化,请在程序逻辑代码中构建图像,而不是绘制刷新代码。
最糟糕的情况是每次都从文件中访问图像。不从较重的对象中访问 CGImageRef
可以节省一些时间。像 [someUIImageObject CGImage]
这样的调用会增加消息发送的开销,而在包含绘图代码的同一对象中访问 CGImageRef
类型的 ivar 则不会。
如果您的源图像尺寸不合适,请先将其绘制到所需尺寸的 CGImageRef
中一次,然后在您的绘图代码中重复使用。
关于objective-c - CGContext 的静态背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6693977/