我在视图上绘制了许多音频表,发现drawRect无法跟上音频变化的速度。实际上,一次只有很小一部分图像发生变化,所以我真的只想绘制增量变化。
我创建了CGLayer
,当数据发生变化时,我使用CGContextBeginPath
,CGContextMoveToPoint
,CGContextAddLineToPoint
和CGContextStrokePath
来绘制CGLayer。
在视图的drawRect
中,我使用CGContextDrawLayerAtPoint
来显示图层。
当数据发生变化时,我通过在CGLayer
的顶部画一条线来绘制差异。我曾经认为它就像是photoshop,而新数据只是过去了,但我现在相信我画过的所有线条仍然存在于图层中。这是对的吗?
如果是,有办法从CGLayer
删除行
答案 0 :(得分:0)
“音频表”究竟是什么意思,显示了您预期设计的一些快照。向我们展示一些代码...
这些是我的建议 -
1)是的新数据只是在CGLayer
之上,除非您将其释放CGLayerRelease(layer)
2)CGContextStrokePath是一项昂贵的操作。您可能想要创建一个泛型线笔并将它们存储在UIImage
中。然后在每次datachanges重复使用UIImage
。
3)最简单的解决方案:如果您只想显示音频电平,请使用UIProgressView
。
答案 1 :(得分:0)
我现在相信我画过的所有线条仍然存在于图层中。这是对的吗?
是
如果有,有办法从CGLayer中删除行吗?
没有。那没有。您将创建一个新图层。通常,您为重复绘制的内容创建一个图层。
您的绘图可以通过绘制rects而不是路径来简化。
对于某些音频表,将电表分成多个部分可能会有所帮助(您可以在这里使用CGLayer)。同样,您可以选择性地绘制矩形和/或剪裁绘图,图像和/或图层。