我有很多小的,不透明的,纯色的,不重叠的,经常变化的位置和大小。以不同方式渲染它们总是会在实际设备上产生滞后。我尝试了以下方法:
CGContext
方法draw(inRect:)
全部呈现
CAShapeLayer
个实例CALayer
个实例 - 性能最佳,但在缩放时缩小了边框上的工件UIimageView
具有较少预生成图片的实例还尝试调整各种CALayer
选项(例如edgeAntialiasingMask
,drawsAsynchronously
,shouldRasterize
...),但仍然无法消除滞后。
那么,是否有工作方法来做到这一点并且没有/最小滞后?
使用度量和答案进行更新
感谢@Saurav的评论提示,我发现时间配置文件中UIView.convert(rect: to:)
方法占用了35%的CPU时间,而UIView.setFrame(...)
占用了另外15%的时间。
渲染本身在刷新帧时不会占用大量CPU时间 - 通过draw(inRect:)
和预渲染UIImageView
检查方法。
答案 0 :(得分:0)
你有没有遵循这些: 1.避免创建CALayer或UIView的多个实例。 2.在viewDidLoad中创建所有1000个图层或视图,并在需要时更新框架。
计算你正在做的帧可能会阻塞线程。