Example #1
0
    /// <summary>
    /// 加载指定名称的“UI窗体”
    /// 功能:
    ///    1:根据“UI窗体名称”,加载预设克隆体。
    ///    2:根据不同预设克隆体中带的脚本中不同的“位置信息”,加载到“根窗体”下不同的节点。
    ///    3:隐藏刚创建的UI克隆体。
    ///    4:把克隆体,加入到“所有UI窗体”(缓存)集合中。
    /// </summary>
    /// <param name="uiFormName">UI窗体名称</param>
    private BaseUiFrame LoadUiForm(string uiFormName)
    {
        GameObject cloneUiPrefabs = null;             //创建的UI克隆体预设
        UiWind     uiWind         = (UiWind)Enum.Parse(typeof(UiWind), uiFormName);

        //根据UI窗体名称,得到对应的加载路径
        _dicFormsPaths.TryGetValue(uiWind, out string strUiFormPaths);
        //根据“UI窗体名称”,加载“预设克隆体”
        if (strUiFormPaths != null)
        {
            cloneUiPrefabs = ResourcesMgr.Instance().LoadAsset(strUiFormPaths, false);
        }
        //设置“UI克隆体”的父节点(根据克隆体中带的脚本中不同的“位置信息”)
        if (CanvasTrans != null && cloneUiPrefabs != null)
        {
            BaseUiFrame baseUiForm = cloneUiPrefabs.GetComponent <BaseUiFrame>();   //窗体基类
            if (baseUiForm == null)
            {
                Debug.Log("baseUiForm==null! ,请先确认窗体预设对象上是否加载了baseUIForm的子类脚本! 参数 uiFormName=" + uiFormName);
                return(null);
            }
            switch (baseUiForm.CurrentUiType.UiWindType)
            {
            case UiWindType.Normal:                     //普通窗体节点
                cloneUiPrefabs.transform.SetParent(_normalTrans, false);
                break;

            case UiWindType.Fixed:                      //固定窗体节点
                cloneUiPrefabs.transform.SetParent(_fixedTrans, false);
                break;

            case UiWindType.PopUp:                      //弹出窗体节点
                cloneUiPrefabs.transform.SetParent(_popUpTrans, false);
                break;
            }
            //设置隐藏
            cloneUiPrefabs.SetActive(false);
            //把克隆体,加入到“所有UI窗体”(缓存)集合中。
            _dicAllUiForms.Add(uiFormName, baseUiForm);
            return(baseUiForm);
        }
        else
        {
            Debug.Log("_TraCanvasTransfrom==null Or goCloneUIPrefabs==null!! ,Plese Check!, 参数uiFormName=" + uiFormName);
        }

        Debug.Log("出现不可以预估的错误,请检查,参数 uiFormName=" + uiFormName);
        return(null);
    }
Example #2
0
 //(“反向切换”属性)窗体的出栈逻辑
 private void PopUiForms()
 {
     if (_staCurrentUiForms.Count >= 2)
     {
         //出栈处理
         BaseUiFrame topUiForms = _staCurrentUiForms.Pop();
         //做隐藏处理
         topUiForms.Hiding();
         //出栈后,下一个窗体做“重新显示”处理。
         BaseUiFrame nextUiForms = _staCurrentUiForms.Peek();
         nextUiForms.Redisplay();
     }
     else if (_staCurrentUiForms.Count == 1)
     {
         //出栈处理
         BaseUiFrame topUiForms = _staCurrentUiForms.Pop();
         //做隐藏处理
         topUiForms.Hiding();
     }
 }
Example #3
0
 /// <summary>
 /// UI窗体入栈
 /// </summary>
 /// <param name="uiFormName">窗体的名称</param>
 private void PushUiFormToStack(string uiFormName)
 {
     //判断“栈”集合中,是否有其他的窗体,有则“冻结”处理。
     if (_staCurrentUiForms.Count > 0)
     {
         BaseUiFrame topUiForm = _staCurrentUiForms.Peek();
         //栈顶元素作冻结处理
         topUiForm.Freeze();
     }
     //判断“UI所有窗体”集合是否有指定的UI窗体,有则处理。
     _dicAllUiForms.TryGetValue(uiFormName, out BaseUiFrame baseWind);
     if (baseWind != null)
     {
         baseWind.Display();//当前窗口显示状态
         //把指定的UI窗体,入栈操作。
         _staCurrentUiForms.Push(baseWind);
     }
     else
     {
         Debug.Log("baseUIForm==null,Please Check, 参数 uiFormName=" + uiFormName);
     }
 }