CA::Transaction::commit() 中的瓶颈问题

11

在使用 时间分析器(Time Profiler) 分析包含许多子视图的 UIScrollView 交互时,我经常会在最重的堆栈跟踪中看到 CA::Transaction::commit()。这个方法是什么,如何减少在其中花费的时间?

屏幕截图

我的猜测是这是将核心动画(Core Animation)图层发送到 GPU 的方式,并且通过减少必须渲染的 CALayer 尺寸和/或数量(即必须发送到 GPU 的数据量)可以加速它。


你尝试过在UIView中明确地使用CALayers吗? - mahal tertin
你能分享一下UIScrollView的初始化和交互代码吗? - Vitalii Gozhenko
1个回答

4

你的猜测可能是正确的。请记住,以下事项通常也在 CATransaction::commit() 中完成:

  • CALayer 的布局:layoutSublayers、preferredFrameSize、CALayoutManager
  • 所有的 CAAction
  • 有时还包括 CALayer 各种滤镜属性的渲染
  • 可能还包括滚动视图中子视图的布局

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接