ios - 高效处理多次/频繁调用 UIView needsDisplayInRect

标签 ios objective-c uiview quartz-graphics cgcontext

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

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

在 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/

相关文章:

ios - IOS7 上的 Tableview 字幕

objective-c - UISearchBar只接受一个单词来搜索youTube视频

ios - 以编程方式在 Xcode Playgrounds 中创建 UIView 子类

ios - Monotouch - 显示一系列图像(太慢)

ios - 在 AFNetworking 中,#ifdef _SYSTEMCONFIGURATION_H 是什么意思?

iOS 钥匙串(keychain)在设备之间共享数据

objective-c - 在 Cocoa Touch 中字符串包含 ' 时 NSPredicate 错误

ios - 在 UIViewController 中的何处设置属性

ios - 偏移不会在onTapGesture之后重置-SwiftUI

ios - 在 xcode 输出中禁用日期/进程 ID