在iOS中使用图层和部分渲染以获得速度的最佳方法是什么

时间:2013-06-17 03:11:53

标签: ios uiview path calayer cashapelayer

我正在使用Core Graphics编写的图形应用程序。我有一个累积数据的缓冲区,我在屏幕上渲染它。它超级慢,我想尽可能避免使用openGL。根据分析器,绘制我的图形数据是什么杀了我(它包含许多转换为路径的点,然后是调用AddPath,DrawPath)..

这就是我想要做的,我的问题是如何使用layers / views /等来最好地实现它。

我有一个网格和一些文字。我希望在CALayer(或其他一些图层/视图?)中呈现它,并且只在需要时更新(图形重新调整)。

只需要刷新部分数据。我想采用前面的屏幕缓冲区,擦除矩形的数据(或用白框覆盖),然后只绘制已更改的图形部分。

然后我想将背景图层与前景图合并以生成合成图像。这要求图层具有透明背景,以免模糊网格。

我已经看过使用CAlayer作为子图层,但它似乎没有提供绘制线条的简单方法。 CAShapeLayer看起来好一点,但看起来它只能绘制一条线。我希望网格由多行组成。

允许我这样做的最佳方法和对象组合是什么?

谢谢, 礼

1 个答案:

答案 0 :(得分:1)

我有一个用于绘制路径的CGLayerRef。对于每个新点,我只绘制新段。当图形达到最大宽度时,我会创建一个新的CGLayerRef并开始将新的线段绘制成该线段。

上一层被新图层绘制时会发生什么情况取决于图表的显示方式,但您可以清除现在位于新图层下方的部分(使用CGContextSetBlendMode(context, kCGBlendModeClear);),或者您可以选择以其他方式将它们混合在一起。

每次更改它们包含的线条时绘制图层与绘制所有线段本身相比相对便宜。

从技术上讲,还会有CALayer用于管理CGLayerRef到屏幕的绘制(通过委托关系drawLayer:inContext:),但所有的线条图都是使用CGLayerRef上下文完成后,CGLayerRef作为一个整体绘制到CALayer的上下文(CGContextDrawLayerInRect(context, frame, backingCGLayer);)中。