我正在开发一个将数据可视化为线图的iOS应用程序.该图表CGPath在全屏自定义中绘制UIView,最多包含320个数据点.数据经常更新,图表需要相应地重新绘制 - 刷新率为10 /秒会很好.
到目前为止这么容易.但是,我的方法似乎占用了大量的CPU时间.每秒10次刷新320个段的图形会导致iPhone 4S上的进程占CPU负载的45%.
也许我低估了引擎盖下的图形工作,但对我而言,CPU负载对于该任务似乎很重要.
下面是我的drawRect()函数,每次准备好一组新数据时都会调用它.N保持点的数量,并且points是具有CGPoint*要绘制的坐标的向量.
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
// set attributes
CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor);
CGContextSetLineWidth(context, 1.f);
// create path
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddLines(path, NULL, points, N+1);
// stroke path
CGContextAddPath(context, path);
CGContextStrokePath(context);
// clean up
CGPathRelease(path);
}
Run Code Online (Sandbox Code Playgroud)
我尝试首先将路径渲染到离线CGContext,然后按照此处的建议将其添加到当前层,但没有任何正面结果.我也直接向CALayer绘制了一个方法,但这也没有任何区别.
有关如何提高此任务性能的任何建议吗?或者渲染对我认识到的CPU更有用吗?OpenGL会有任何意义/差异吗?
谢谢/安迪
更新:我也尝试使用UIBezierPath而不是CGPath.这篇文章在这里给出了一个很好的解释为什么没有帮助.Tweaking CGContextSetMiterLimit等.也没有带来很大的解脱.
更新#2:我最终切换到OpenGL.这是一个陡峭而令人沮丧的学习曲线,但性能提升令人难以置信.但是,CoreGraphics的抗锯齿算法比OpenGL中的4x多重采样可以实现更好的工作.