【发布时间】:2016-12-26 21:13:34
【问题描述】:
我正在开发一个 iPad 应用程序,它有一个自定义绘制的UIView,它基本上覆盖了整个屏幕。它是一个音频应用程序,它有 VU 表,每秒大约 30 次通过以太网获取更新消息,然后告诉 UI 在屏幕上重绘 VU 表。
我遇到的问题是视图中的不同位置有 16 个 VU 表,我最终为每个位置调用 needsDisplayInRect 每秒 30 次。如果我在drawRect 函数中完成所有绘图,那么它可以工作,但它非常缓慢,因为传递给drawRect 的CGRect 几乎是整个屏幕。
在 OSX 版本中有 NSView getRectsBeingDrawn 函数,它为我提供了显着提高重绘性能的途径。但是,据我所知,iOS 中没有等效功能。
我尝试存储我调用的CGRects,然后只在drawRect 中重绘它们,但事实证明,iOS 经常决定重绘CGRects 之间已调用needsDisplayInRect 的区域他们,所以我最终在我没有请求重绘的区域上得到大的白色矩形(尽管我确实得到了我期望的性能改进)。这里的问题是我看不到一种方法来获取实际正在重绘的矩形,只是将矩形传递给 drawRect,它本质上是所有被重绘的矩形的联合。
那么,有没有其他方法可以加快我错过的UIView 小区域的频繁重绘?
【问题讨论】:
标签: ios objective-c uiview quartz-graphics cgcontext