我正在开发一个iPad应用程序,它有一个自定义绘制的UIView
,它基本上覆盖了整个屏幕。它是一个音频应用程序,它有 VU 表,每秒约 30 次通过以太网获取更新消息,然后告诉 UI 在屏幕上重新绘制 VU 表。
我遇到的问题是 View 中的不同位置有 16 个 VU 表,我最终每秒为每个表调用 needsDisplayInRect
30 次。如果我在 drawRect
函数中完成所有绘图,那么它就可以工作,但是它非常缓慢,因为传递给 drawRect
的 CGRect
几乎是整个屏幕。
在 OSX 版本中有 NSView
getRectsBeingDrawn
函数,它为我提供了显着提高重绘性能的途径。但是,据我所知,iOS 中没有等效的功能。
我试过存储我调用的 CGRects
然后只在 drawRect
中重绘它们,但事实证明 iOS 经常决定重绘 之间的区域code>CGRects
已经调用了 needsDisplayInRect
,所以我最终在我没有请求重绘的区域上得到了大的白色矩形(尽管我确实得到了性能改进我正在期待)。这里的问题是我看不到获取实际正在重绘的矩形的方法,只是将矩形传递给 drawRect,它本质上是所有正在重绘的矩形的联合。
那么,有没有其他方法可以加快我错过的 UIView
小区域的频繁重绘速度?
最佳答案
最简单的解决方案几乎肯定是为每个 VU 表创建一个 subview 。假设您只有一个 VUMeterView
类并创建它的 16 个实例。
关于ios - 高效处理多次/频繁调用 UIView needsDisplayInRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043609/