/// <summary> /// 加载指定名称的“UI窗体” /// 功能: /// 1、根据“UI窗体名“加载预设克隆体 /// 2、根据克隆体中不同位置信息,设置不同父对象 /// 3、隐藏刚创建的UI克隆体 /// 4、把克隆体加入到 _dicAllUiForms 中 /// </summary> /// <param name="uiFormName">UI窗体的名称</param> private BaseUIForm LoadUIForm(string uiFormName) { string strUIFormsPaths = null; GameObject goCloneUIPrefabs = null; BaseUIForm baseUiForm = null; // 根据UI窗体名称,得到对应的加载路径 _dicFormsPaths.TryGetValue(uiFormName, out strUIFormsPaths); //1、根据“UI窗体名“加载预设克隆体 if (!string.IsNullOrEmpty(strUIFormsPaths)) { goCloneUIPrefabs = ResourcesMgr.GetInstance().LoadAsset(strUIFormsPaths, false); } //2、根据克隆体中不同位置信息,设置不同父对象 if (_traCanvasTransform != null && goCloneUIPrefabs != null) { baseUiForm = goCloneUIPrefabs.GetComponent <BaseUIForm>(); if (baseUiForm == null) { Debug.Log(strUIFormsPaths + " 克隆的窗体上没有BaseUIForm"); return(null); } switch (baseUiForm.CurrentUiType.UIForms_Type) { case UIFormsType.Normal: // 普通窗体 goCloneUIPrefabs.transform.SetParent(_traNormal, false); break; case UIFormsType.Fixed: // 固定窗体 goCloneUIPrefabs.transform.SetParent(_traFixed, false); break; case UIFormsType.PopUp: //弹出窗体 goCloneUIPrefabs.transform.SetParent(_traPopUp, false); break; default: break; } //3、隐藏刚创建的UI克隆体 goCloneUIPrefabs.SetActive(false); //4、把克隆体加入到 _dicAllUiForms 中 _dicAllUiForms.Add(uiFormName, baseUiForm); return(baseUiForm); } else { Debug.Log("_traCanvasTransform = null Or goCloneUIPrefabs = null" + uiFormName); return(null); } }
/// <summary> /// 退出指定UI窗体 /// </summary> /// <param name="uiFormName">指定的窗体名称</param> private void ExitUIForms(string uiFormName) { BaseUIForm baseUiForm = null; if (string.IsNullOrEmpty(uiFormName)) { return; } // _dicCurrentShowUiForms 中不存在 uiFormName,直接返回 _dicCurrentShowUiForms.TryGetValue(uiFormName, out baseUiForm); if (baseUiForm == null) { return; } // 指定窗体,标记为“隐藏窗体”,并从 _dicCurrentShowUiForms 移除 baseUiForm.Hiding(); _dicCurrentShowUiForms.Remove(uiFormName); }
/// <summary> /// 显示(打开)UI窗体 /// 功能: /// 1、根据UI窗体的名称,加载到“所有UI窗体”缓存集合中 /// 2、根据不同的UI窗体的显示模式,分别做不同的加载处理 /// </summary> /// <param name="uiFormName">UI窗体预设的名称</param> public void ShowUIForms(string uiFormName) { BaseUIForm baseUIForms = null; //参数的检查 if (string.IsNullOrEmpty(uiFormName)) { return; // 参数错误返回 } //根据UI窗体的名称,加载到“所有UI窗体”缓存集合中,并且从 “所有UI窗体”缓存集合中 获取本窗体 baseUIForms = LoadFormsToAllFormsCache(uiFormName); if (baseUIForms == null) { return; } // 清空“栈集合”中的数据 if (baseUIForms.CurrentUiType.IsClearStack) { bool ClearResult = ClearStackArray(); if (!ClearResult) { Debug.Log("栈中的数据没有清空,检查 uiFormName " + uiFormName); } } //根据不同的UI窗体的显示模式,分别做不同的加载处理 switch (baseUIForms.CurrentUiType.UIForms_ShowMode) { case UIFormShowMode.Normal: // 普通显示 // 将 窗体 加载到 _dicCurrentShowUiForms 中 LoadUIToCurrentCache(uiFormName); break; case UIFormShowMode.ReverseChange: // 反向切换 PushUIFormToStack(uiFormName); break; case UIFormShowMode.HideOther: //隐藏其他 EnterUIFormsAndHideOther(uiFormName); break; } }
/// <summary> /// UI窗体入栈 /// </summary> /// <param name="uiFormName">窗体的名称</param> private void PushUIFormToStack(string uiFormName) { BaseUIForm baseUiForm = null; // 判断栈集合中,是否已有窗体,有则“冻结”处理 if (_staCurrentUiForms.Count > 0) { BaseUIForm topUIForm = _staCurrentUiForms.Peek(); topUIForm.Freeze(); } // 判断 _dicAllUiForms 中是否有指定的UI窗体 _dicAllUiForms.TryGetValue(uiFormName, out baseUiForm); if (baseUiForm != null) { baseUiForm.Display(); // 把指定的UI窗体,入栈操作 _staCurrentUiForms.Push(baseUiForm); } else { Debug.Log("BaseUIForm =NULL , uiFormName = " + uiFormName); } }
/// <summary> /// 把当前窗体加载到 _dicCurrentShowUiForms 中 /// </summary> /// <param name="uiFormName"></param> private void LoadUIToCurrentCache(string uiFormName) { BaseUIForm baseUiForm = null; //UI窗体的基类 BaseUIForm baseUIFormFromAllCache; // 从_DicAllUIForms 中得到窗体基类 if (string.IsNullOrEmpty(uiFormName)) { return; } _dicCurrentShowUiForms.TryGetValue(uiFormName, out baseUiForm); if (baseUiForm != null) { return; // 已经显示,返回 } // 把当前窗体,加载到 _dicCurrentShowUiForms 集合中 _dicAllUiForms.TryGetValue(uiFormName, out baseUIFormFromAllCache); if (baseUIFormFromAllCache != null) { _dicCurrentShowUiForms.Add(uiFormName, baseUIFormFromAllCache); baseUIFormFromAllCache.Display(); //显示当前窗体 } // }
/// <summary> /// “反向切换”属性窗体的出栈 /// </summary> private void PopUIForm() { if (_staCurrentUiForms.Count >= 2) { // 出栈处理 BaseUIForm topUiForm = _staCurrentUiForms.Pop(); // 隐藏处理 topUiForm.Hiding(); // 新的栈顶重新显示 BaseUIForm nextUiForm = _staCurrentUiForms.Peek(); nextUiForm.ReDisplay(); } else if (_staCurrentUiForms.Count == 1) { // 出栈处理 BaseUIForm topUiForm = _staCurrentUiForms.Pop(); // 隐藏处理 topUiForm.Hiding(); } else { return; } }