0

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

我想实时绘制多达 512 个 2 像素宽的片段,但不确定如何以最高性能做到这一点。

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

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

在从视图上下文设置图层并使用自己的上下文写入其他地方的图层之后,可以将图层绘制到视图中

CGContextDrawLayerAtPoint(context, point, layer);

如果图层中不断绘制某些内容,它应该何时使用 setNeedsDisplay 通知 UIView 并且它们可以保持同步?例如,没有将 setNeedsDisplay 分派到主线程(这感觉不对)。

进行此优化后,在图层中渲染如此多路径/线的最佳方法是什么?

4

1 回答 1

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. 分析您的代码以查看瓶颈在哪里。它们是在绘图代码中,还是在计算多边形的代码中?
于 2014-04-19T12:51:01.057 回答