【问题标题】:Handling multiple/frequent calls to UIView needsDisplayInRect efficiently有效地处理对 UIView 需求DisplayInRect 的多次/频繁调用
【发布时间】:2016-12-26 21:13:34
【问题描述】:

我正在开发一个 iPad 应用程序,它有一个自定义绘制的UIView,它基本上覆盖了整个屏幕。它是一个音频应用程序,它有 VU 表,每秒大约 30 次通过以太网获取更新消息,然后告诉 UI 在屏幕上重绘 VU 表。

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

在 OSX 版本中有 NSView getRectsBeingDrawn 函数,它为我提供了显着提高重绘性能的途径。但是,据我所知,iOS 中没有等效功能。

我尝试存储我调用的CGRects,然后只在drawRect 中重绘它们,但事实证明,iOS 经常决定重绘CGRects 之间已调用needsDisplayInRect 的区域他们,所以我最终在我没有请求重绘的区域上得到大的白色矩形(尽管我确实得到了我期望的性能改进)。这里的问题是我看不到一种方法来获取实际正在重绘的矩形,只是将矩形传递给 drawRect,它本质上是所有被重绘的矩形的联合。

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

【问题讨论】:

    标签: ios objective-c uiview quartz-graphics cgcontext


    【解决方案1】:

    最简单的解决方案几乎可以肯定是为每个 VU 表创建一个子视图。假设您只有一个 VUMeterView 类并创建了 16 个实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2020-10-28
      • 2014-06-30
      • 2016-12-10
      • 1970-01-01
      相关资源
      最近更新 更多