UGUI源码(三)

LayoutRebuilder

图片转自:https://blog.csdn.net/qq_28820675/article/details/106245195

参考:https://blog.csdn.net/qq826364410/article/details/88141753

Graphic的Layout是通过LayoutRebuilder.MarkLayoutForRebuild方法来标记重建的。

MarkLayoutRebuild:

1.找到父对象中最近的ILayoutGroup组件layoutRoot。

2.从LayoutRebuilder对象池中Pop出一个LayoutRebuilder并用layoutRoot初始化。

3.如果创建的LayoutRebuilder已经在CanvasUpdateRegistry的布局重建队列中,就更新,否则就加入。

 LayoutRebuilder继承了ICanvasElement,在重建时遍历CanvasUpdateRegistry的重建队列,调用Rebuild方法。

ReBuild:实现了ICanvasElement的ReBuild方法

PerformLayoutCalculation:参数:(layoutRoot,回调函数计算布局)

以layoutRoot的子对象为参数递归调用该方法,先计算子对象布局,然后计算父对象布局,父对象的布局计算需要依赖子对象的大小(比如ContentSizeFitter)

PerformLayoutControl:参数:(layoutRoot,回调函数计算布局)

1.在layoutRoot上获取所有ILayoutController类型的组件

2.先处理组件中为ILayoutSelfController类型的情况,也就是先处理本身的RectTransform大小设置

3.然后处理组件中不是ILayoutSelfController了性的情况,处理比如子对象的布局组(LayoutGroup)的RectTransform大小设置。

4.然后以m_ToRebuild的子对象为参数,递归调用PerformLayoutControl方法,处理子对象本身的RectTransform大小和子对象的子对象的RectTransform大小。

原文地址:https://www.cnblogs.com/mcyushao/p/13938471.html