objective-c - CGContext 的静态背景

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

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

我正在使用 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/

相关文章:

ios - 使用未解析的标识符 'PHAssetMediaTypeImage'

ios - CoreData 重复结果,时间戳谓词

ios - 如何将 UITableView 连接到新创建的 UITableView 类?

iphone - Core Graphics 未以正确的宽度绘制线条

iOS - IB 中的 UILabel attributedText 无法更改字体大小

iphone - iOS 跳转到不同的 View

iphone - 如何在 UIImageView 实例内绘制一个点?

ios - 如何将透视变换应用于 UIView?

iphone - 使用 Core Animation (CAKeyFrameAnimation) 调整和移动 UIView

ios - 动态大小的 collectionView 单元导致可见性问题 - iOS