Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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;
            }
        }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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();  //显示当前窗体
            }
            //
        }
Exemplo n.º 6
0
 /// <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;
     }
 }