1

我在视图上绘制了许多音频表,发现 drawRect 跟不上音频变化的速度。实际上,一次只有很小一部分图像发生变化,所以我真的只想绘制增量变化。

我创建了一个CGLayer,当数据发生变化时,我使用、CGContextBeginPath和来在 CGLayer 中绘制。CGContextMoveToPointCGContextAddLineToPointCGContextStrokePath

drawRectCGContextDrawLayerAtPoint用来显示图层的视图中。

当数据发生变化时,我通过在CGLayer. 我曾以为它就像 Photoshop 一样,新数据只是在旧数据上绘制,但我现在相信我曾经绘制的所有线条仍然存在于图层中。那是对的吗?

如果是这样,有没有办法从 a 中删除行CGLayer

4

2 回答 2

0

您所说的“音频表”到底是什么意思,显示了您预期设计的一些快照。向我们展示了一些代码...

这些是我的建议-

CGLayer1) 是的,除非你发布它,否则新数据只是在上面绘制CGLayerRelease(layer)

2) CGContextStrokePath 是一个昂贵的操作。您可能想要创建一个通用的线条笔触并将它们存储在UIImage. UIImage然后在每次数据更改时重用。

3)最简单的解决方案:UIProgressView如果您只想显示音频电平,请使用。

于 2013-07-11T16:41:43.103 回答
0

我现在相信我曾经画过的所有线条仍然存在于图层中。那是对的吗?

是的。

如果是这样,有没有办法从 CGLayer 中删除行?

不,那里没有。您将创建一个新图层。通常,您为重复绘制的内容创建一个图层。

您的绘图可以通过绘制矩形而不是路径来简化。

对于某些音频仪表,将仪表分成多个部分可能会有所帮助(您可以在此处使用 CGLayer)。类似地,您可以选择性地绘制矩形和/或剪切绘图、图像和/或图层。

于 2013-12-05T17:09:05.280 回答