处理多个/频繁调用UIView needsDisplayInRect高效

问题描述:

我正在研究一个基本上覆盖整个屏幕的自定义绘制的UIView的iPad应用程序。它是一个音频应用程序,它具有VU计量表,它可以通过以太网约30秒钟获得更新消息,然后告诉UI重新绘制屏幕上的VU计量表。处理多个/频繁调用UIView needsDisplayInRect高效

我遇到的问题是在视图中有不同位置有16个VU表,我最终每秒调用needsDisplayInRect每秒30次。如果我在drawRect函数中完成所有绘图,那么它可以工作,但是它非常缓慢,因为CGRect传递到drawRect几乎是整个屏幕。

在OSX版本中有NSViewgetRectsBeingDrawn函数,它给了我一个显着提高重绘性能的途径。不过,据我所知,iOS中没有相应的功能。

我已经试过存储,我已经叫那么CGRects只重绘他们drawRect,但事实证明,经常的iOS决定重绘CGRects已经有呼吁他们needsDisplayInRect之间的区域,所以我结束了我还没有请求重绘的区域上的大白色矩形(尽管我确实获得了我期待的性能改进)。这里的问题是,我看不到一种方法来获取实际上正在重绘的rects,只是将rect传递到drawRect中,这实质上是所有正在重绘的rects的联合。

那么,有没有其他的方法来加快频繁重绘我错过的UIView的小区域?

最简单的解决方案几乎可以肯定地为每个VU表做一个子视图。据推测,你只需要一个VUMeterView课程并制作16个实例。