我正在寻找一种在iOS上有效绘制具有很多点(最多10000个)的折线图的方法。该图将获取实时数据,并且需要每秒更新多次。我正在尝试找出一种有效绘制图形的方法,这样它就不会在绘制时浪费CPU并阻塞主线程。
我目前正在UIBezierPath
后台线程中为折线图创建一个,添加所有点并将其绘制在CALayer(已启用异步绘制)中。速度不是很快,会占用大量CPU,绘制速度太慢,UI会变得迟钝。我正在绘制实时数据,从理论上讲,我可以UIBezierPath
每次都重复使用相同的数据,只是追加新点,但是过一会儿旧值将被丢弃,这意味着已删除值的点必须从贝塞尔曲线路径中删除,这是不可能的。
在iOS上有效地绘制大型数据集方面,我还没有发现任何东西,但我希望有一些使用GPU来提高性能的方法。
我终于找到了使用OpenGL绘制图形的实现:https : //github.com/syedhali/EZAudio/blob/master/EZAudio/EZAudioPlotGL.m
实际上,这非常简单,并且性能提升很大。
对于使用A7芯片(或更新的)的设备,用金属绘制图形可能会更快,这也应该很容易。有关此操作的一些指南:https : //www.raywenderlich.com/77488/ios-8-metal-tutorial-swift-getting-started
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句