在drawRect中绘制大量路径

时间:2014-04-19 11:50:59

标签: ios core-graphics cglayer

渲染大量路径的最佳方法是什么? 512在视图的drawRect?

我想实时绘制512个像素宽的像素段,并且不确定如何以最高性能执行此操作。

创建和绘制所有这些段作为BezierPath或多个bezierPaths的速度还不够快。

我已经读过可以使用CGLayers并将其渲染到目标UIView中。

从视图上下文设置图层并使用自己的上下文写入其他图层后,可以使用

将图层绘制到视图中
CGContextDrawLayerAtPoint(context, point, layer);

如果图层中有不断绘制的内容,应该何时通过setNeedsDisplay通知UIView并且它们是否可以保持同步?例如没有将setNeedsDisplay调度到主线程(这感觉不对)。

一旦进行了这项优化,在图层中渲染如此多的路径/线条的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您想要非常快,请使用OpenGL ES;)否则,需要考虑一些因素:

  1. 做尽可能少的重复工作。例如。如果在渲染之间有200个背景多边形保持相同,则将它们渲染为UIImage并在-drawRect方法的开头绘制该UIImage。避免if(array.count < 3) { y += array.count } else { y += 3 }之类的事情,因为int array_count = array.count; if(array_count < 3) { y += array_count } else { y += 3 }更快!好的,在这种情况下没有太大区别,但在很多情况下这些事情都很重要!避免在内循环中创建太多对象。
  2. 使用CADisplayLink
  3. 描述您的代码以查看瓶颈所在。它们是在绘图代码中还是在计算多边形的代码中?