我有很多小反刍,不透明,纯色,不重叠,频繁变化的位置和大小。以不同的方式渲染它们总会在实际设备上产生滞后。我尝试以下方法:在iOS中渲染大量矩形的最快方法?
- 呈现所有通过
CGContext
在draw(inRect:)
方法 - 使用个人
CAShapeLayer
每个矩形实例 - 使用
CALayer
情况下,预渲染的内容 - 在表现最好的,但产生的假象上边界时rects是缩放 UIimageView
实例具有小预生成的图像
也试图调整各种CALayer
选项(前。 edgeAntialiasingMask
,drawsAsynchronously
,shouldRasterize
...),但仍不能消除滞后。
那么,有没有办法工作要做到这一点并没有得到/最小滞后?
与测量更新,并回答
感谢@Saurav在评论文章中,我已经与时间轮廓发现UIView.convert(rect: to:)
方法吃的CPU时间的35%,UIView.setFrame(...)
吃另外15%。
刷新帧时,渲染本身不会消耗大量的CPU时间 - 通过draw(inRect:)
和预渲染的UIImageView
检查方法。
使用OpenGL或者,如果所有目标设备都支持它,则为Metal。 –
看起来像少于1000个矩形。这看起来不是很多(我使用标准Core Graphics w/o lag在60fps的旧iPad 3上绘制了超过5000行)。我会首先怀疑你的布局算法。你从仪器上看到什么?你受限于CPU吗?你为什么认为这是绘图本身?这似乎确实是'CALayer'的建造目的。我不明白你为什么要预渲染,只是有一个简单的背景颜色。 (也就是说,如果你可以控制计算,我可能会实现w /'draw(inRect:)') –
@robmayoff我忘了提及,OpenGL是非常有边缘的情况,因为它生活在不同的'世界'中。希望能够找到更多'UIView'友好的方法 – brigadir