0

我正在开发一个使用 Core Graphics 编写的图形应用程序。我有一个积累数据的缓冲区,并将其呈现在屏幕上。它超级慢,如果可能的话,我想避免使用 openGL。根据分析器的说法,绘制我的图形数据是什么让我很头疼(它由许多转换为路径的点组成,然后是调用 AddPath、DrawPath)..

这就是我想做的,我的问题是如何使用图层/视图/等最好地实现它。

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

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

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

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

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

谢谢,礼萨

4

1 回答 1

1

我有一个CGLayerRef用于绘制路径的。对于每个新点,我只绘制新段。当图表达到全宽时,我会创建一个新的CGLayerRef并开始在其中绘制新的线段。

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

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

从技术上讲,还有CALayers 用于管理CGLayerRefs 在屏幕上的绘制(通过委托关系drawLayer:inContext:),但是所有的线条绘制都是使用CGLayerRefs 上下文完成的,然后将sCGLayerRef整体绘制到CALayers 上下文中(CGContextDrawLayerInRect(context, frame, backingCGLayer);)。

于 2013-06-18T19:09:56.297 回答