private static void MarkLayoutRootForRebuild(RectTransform controller)
 {
     if (!(controller == null))
     {
         LayoutRebuilder layoutRebuilder = LayoutRebuilder.s_Rebuilders.Get();
         layoutRebuilder.Initialize(controller);
         if (!CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild(layoutRebuilder))
         {
             LayoutRebuilder.s_Rebuilders.Release(layoutRebuilder);
         }
     }
 }
Beispiel #2
0
        private static void MarkLayoutRootForRebuild(RectTransform controller)
        {
            if (controller == null)
            {
                return;
            }
            var rebuilder = s_Rebuilders.Get();

            rebuilder.Initialize(controller);
            if (!CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild(rebuilder))
            {
                s_Rebuilders.Release(rebuilder);
            }
        }
        private static void MarkLayoutRootForRebuild(RectTransform controller)
        {
            if ((UnityEngine.Object)controller == (UnityEngine.Object)null)
            {
                return;
            }
            LayoutRebuilder element = LayoutRebuilder.s_Rebuilders.Get();

            element.Initialize(controller);
            if (CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild((ICanvasElement)element))
            {
                return;
            }
            LayoutRebuilder.s_Rebuilders.Release(element);
        }
        /// <summary>
        /// 标记根节点重新布局
        /// </summary>
        /// <param name="controller"></param>
        private static void MarkLayoutRootForRebuild(RectTransform controller)
        {
            if (controller == null)
            {
                return;
            }

            var rebuilder = s_Rebuilders.Get();

            rebuilder.Initialize(controller);
            //如果注册rebuild队列中已经包含了这个gameobject,就直接进行释放回收
            //不包含的话,就注册进去,暂时不回收
            // 19/5 2020 Image 源码学习
            //这里注册的到rebuild队列的对象类型为继承自ICanvasElement的LayoutRebuilder
            //主要是受s_rebuilders的影响,这样在CanvasUpdateRegistry中进行layoutRebuid的时候调用的就是LayoutRebuilder重写的rebuild方法了
            //TryRegisterCanvasElementForLayoutRebuild这个方法使用了多态的概念
            if (!CanvasUpdateRegistry.TryRegisterCanvasElementForLayoutRebuild(rebuilder))
            {
                s_Rebuilders.Release(rebuilder);
            }
        }