如何通过许多微小的修改来绘制图像?

时间:2013-07-11 13:29:06

标签: ios uiview cgcontext cglayer

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

我创建了CGLayer,当数据发生变化时,我使用CGContextBeginPathCGContextMoveToPointCGContextAddLineToPointCGContextStrokePath来绘制CGLayer。

在视图的drawRect中,我使用CGContextDrawLayerAtPoint来显示图层。

当数据发生变化时,我通过在CGLayer的顶部画一条线来绘制差异。我曾经认为它就像是photoshop,而新数据只是过去了,但我现在相信我画过的所有线条仍然存在于图层中。这是对的吗?

如果是,有办法从CGLayer删除行

2 个答案:

答案 0 :(得分:0)

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

这些是我的建议 -

1)是的新数据只是在CGLayer之上,除非您将其释放CGLayerRelease(layer)

2)CGContextStrokePath是一项昂贵的操作。您可能想要创建一个泛型线笔并将它们存储在UIImage中。然后在每次datachanges重复使用UIImage

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

答案 1 :(得分:0)

  

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

  

如果有,有办法从CGLayer中删除行吗?

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

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

对于某些音频表,将电表分成多个部分可能会有所帮助(您可以在这里使用CGLayer)。同样,您可以选择性地绘制矩形和/或剪裁绘图,图像和/或图层。