【发布时间】:2016-01-19 21:35:45
【问题描述】:
我正在寻找一种在 iOS 上有效地绘制包含大量点(最多 10 000 个)的折线图的方法。图表获取实时数据,需要每秒更新多次。我正在尝试找出一种方法来有效地绘制图形,这样它就不会在绘制时最大化 CPU 并阻塞主线程。
我目前正在后台线程中为折线图创建UIBezierPath,添加所有点并将其绘制在 CALayer(启用了异步绘图)中。它不是很快,会耗尽 CPU 并且绘图速度很慢,UI 变得迟钝。我正在绘制实时数据,理论上我可以每次重复使用相同的UIBezierPath 并添加新点,但是一段时间后会丢弃旧值,这意味着必须从贝塞尔路径,这是不可能的。
我还没有找到任何关于在 iOS 上高效绘制大型数据集的方法,但我希望有办法使用 GPU 来提高性能。
【问题讨论】:
-
你必须画出所有的 10k 点吗?即使在 iPad 屏幕上,这似乎也太过分了……(比水平像素多点)。您是否考虑过将数据平均到一个较小的集合中?
-
@originaluser2 我完全同意。我正在做一些客户工作,但还没能说服他们放弃绘制这么多点的想法。
-
好吧,如果你能说服他们,平均是你最好的选择!我怀疑您是否能够充分利用 GPU 而无需完全使用 Metal/Open GL。我很确定
UIBezierPath主要使用核心图形,并且全部在 CPU 上运行。 -
SciChart iOS 轻松支持超过 10k 点(测试高达 1M 点)。 2.3 版将支持 Metal 以及模拟器的 OpenGLES scichart.com/ios-chart-performance-comparison
标签: ios graph plot drawing core-graphics