处理多个/频繁调用UIView needsDisplayInRect高效
问题描述:
我正在研究一个基本上覆盖整个屏幕的自定义绘制的UIView
的iPad应用程序。它是一个音频应用程序,它具有VU计量表,它可以通过以太网约30秒钟获得更新消息,然后告诉UI重新绘制屏幕上的VU计量表。处理多个/频繁调用UIView needsDisplayInRect高效
我遇到的问题是在视图中有不同位置有16个VU表,我最终每秒调用needsDisplayInRect
每秒30次。如果我在drawRect
函数中完成所有绘图,那么它可以工作,但是它非常缓慢,因为CGRect
传递到drawRect
几乎是整个屏幕。
在OSX版本中有NSView
getRectsBeingDrawn
函数,它给了我一个显着提高重绘性能的途径。不过,据我所知,iOS中没有相应的功能。
我已经试过存储,我已经叫那么CGRects
只重绘他们drawRect
,但事实证明,经常的iOS决定重绘CGRects
已经有呼吁他们needsDisplayInRect
之间的区域,所以我结束了我还没有请求重绘的区域上的大白色矩形(尽管我确实获得了我期待的性能改进)。这里的问题是,我看不到一种方法来获取实际上正在重绘的rects,只是将rect传递到drawRect中,这实质上是所有正在重绘的rects的联合。
那么,有没有其他的方法来加快频繁重绘我错过的UIView
的小区域?
答
最简单的解决方案几乎可以肯定地为每个VU表做一个子视图。据推测,你只需要一个VUMeterView
课程并制作16个实例。