ios - 在 iOS 上高效绘制多点图表

标签 ios graph plot drawing core-graphics

我正在寻找一种在 iOS 上高效绘制包含大量点(最多 10000 个)的折线图的方法。该图获取实时数据,需要每秒更新多次。我正在尝试找出一种有效绘制图形的方法,这样它就不会在绘制时占用 CPU 资源并阻塞主线程。

我目前正在为折线图创建一个 UIBezierPath,在后台线程中添加所有点并在 CALayer(已启用异步绘图)中绘制它。它不是很快,会占用 CPU 资源并且绘图速度太慢以至于 UI 变得迟钝。我正在绘制实时数据,理论上我可以每次都重复使用相同的 UIBezierPath 并仅附加新点,但是一段时间后旧值会被丢弃,这意味着已删除值的点将具有从贝塞尔路径中删除,这是不可能的。

我还没有找到任何关于在 iOS 上高效绘制大型数据集的信息,但我希望有一些方法可以使用 GPU 来提高性能。

最佳答案

几年前我遇到过这样的情况(回到 iPhone 4 天)。

我使用了一个 CGMutablePathRef,我使用 CGPathMoveToPoint 添加了第一个点,使用 CGPathAddLineToPoint 添加了后续点。

为了获得可接受的性能,我将数据点存储在 C 数组中(不是 NSArray)。此外,当绘制一个点时,如果它的显示坐标与最后一个绘制点相同,我就跳过了对 CGPathAddLineToPoint 的调用。 (当数据点多于像素时,通常会出现这种情况)。

我不记得确切的绘图时间,但它出奇地快。

关于ios - 在 iOS 上高效绘制多点图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887378/

相关文章:

ios - Firebase Swift 3.0 语法更新?

objective-c - Objective-C : How to resolve Leak in Code (results from Instrument)

iphone - Xcode 4 + iOS 4.3 : "No Packager exists for the type of archive"

ios - swift : Append Characters in Attributed String

graph - 所有对最大流量

fonts - 数学 : change all text fonts simultaneosly in Plot or Listplot

python - 如何设置从第三列绘制值的条件? python / Pandas

graph - Stata 图表中没有水平线且没有图例边框

r - 在 R 中制作这个无花果

javascript - Flot Graph 与轴和工具提示不一致?