我正在寻找一种在 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/