在iOS中渲染大量矩形的最快方法?

时间:2017-05-24 14:50:54

标签: ios performance render calayer

我有很多小的,不透明的,纯色的,不重叠的,经常变化的位置和大小。以不同方式渲染它们总是会在实际设备上产生滞后。我尝试了以下方法:

  • 通过CGContext方法
  • 中的draw(inRect:)全部呈现
  • 为每个rect使用单独的CAShapeLayer个实例
  • 使用预呈现内容的CALayer个实例 - 性能最佳,但在缩放时缩小了边框上的工件
  • UIimageView具有较少预生成图片的实例

还尝试调整各种CALayer选项(例如edgeAntialiasingMaskdrawsAsynchronouslyshouldRasterize ...),但仍然无法消除滞后。

example

那么,是否有工作方法来做到这一点并且没有/最小滞后?

使用度量和答案进行更新

感谢@Saurav的评论提示,我发现时间配置文件中UIView.convert(rect: to:)方法占用了35%的CPU时间,而UIView.setFrame(...)占用了另外15%的时间。

渲染本身在刷新帧时不会占用大量CPU时间 - 通过draw(inRect:)和预渲染UIImageView检查方法。

1 个答案:

答案 0 :(得分:0)

你有没有遵循这些: 1.避免创建CALayer或UIView的多个实例。 2.在viewDidLoad中创建所有1000个图层或视图,并在需要时更新框架。

计算你正在做的帧可能会阻塞线程。