예제 #1
0
        public void Uninstall()
        {
            while (_stackCurrentUI.Count > 0)
            {
                BaseUI ui = _stackCurrentUI.Pop();
                ui.Close(true);
            }

            if (_dictLoadedAllUIs != null)
            {
                var list = _dictLoadedAllUIs.ToList();
                for (int i = list.Count - 1; i >= 0; i--)
                {
                    Close(list[i].Key, true);
                }
                list = null;
            }
            _allRegisterUIDict.Clear();
            _stackCurrentUI.Clear();
            _dictCurrentShowUIs.Clear();

            TransFixed  = null;
            TransPopUp  = null;
            TransRoot   = null;
            TransNormal = null;
            TransGlobal = null;

            RectransGlobal = null;
            RectransFixed  = null;
            RectransNormal = null;
            RectransPopUp  = null;
            RectransRoot   = null;

            _stackCurrentUI     = null;
            _allRegisterUIDict  = null;
            _dictLoadedAllUIs   = null;
            _dictCurrentShowUIs = null;

            DelHideCallBack  = null;
            LoadResourceFunc = null;

            Resources.UnloadUnusedAssets();
        }
예제 #2
0
        /// <summary>
        /// 弹出窗口,出栈
        /// </summary>
        /// <param name="uiName"></param>
        private void UnLoadStackUI(string uiName, bool isDestroy = false)
        {
            //有两个以上弹窗出现时
            if (_stackCurrentUI.Count >= 2)
            {
                //第一个出栈
                BaseUI topUI = _stackCurrentUI.Pop();
                topUI.Close(isDestroy: isDestroy);

                //第二个重新显示
                BaseUI nextUI = _stackCurrentUI.Peek();
                nextUI.Show(true);
            }
            //当前只有一个弹窗
            else if (_stackCurrentUI.Count == 1)
            {
                //出栈的窗体进行隐藏
                BaseUI topUI = _stackCurrentUI.Pop();
                topUI.Close(isDestroy: isDestroy);
            }
        }
예제 #3
0
        /// <summary>
        /// 弹出窗口,入栈
        /// 先冻结栈中窗口,再将此窗口入栈
        /// </summary>
        /// <param name="uiName"></param>
        private void LoadStackUI(string uiName)
        {
            BaseUI baseUI;

            //判断栈里是否有窗口,有则冻结响应
            if (_stackCurrentUI.Count > 0)
            {
                BaseUI topUI = _stackCurrentUI.Peek();
                if (!topUI.AssetsName.Equals(uiName))
                {
                    topUI.Close(freeze: true);
                }
            }

            //获取当前UI,进行展示处理
            _dictLoadedAllUIs.TryGetValue(uiName, out baseUI);
            if (baseUI != null)
            {
                if (baseUI.IsShowing)
                {
                    baseUI.OnShow();
                }
                else
                {
                    if (baseUI.IsInitOver)
                    {
                        baseUI.OnEnabled(false);
                    }
                    baseUI.Show();
                }

                if (!_stackCurrentUI.Contains(baseUI))
                {
                    //该弹出UI入栈
                    _stackCurrentUI.Push(baseUI);
                }
                else
                //对于栈内存在,则将其提升至栈顶
                {
                    while (_stackCurrentUI.Count > 0)
                    {
                        var ui = _stackCurrentUI.Pop();
                        if (ui != baseUI)
                        {
                            _backStack.Push(ui);
                        }
                    }

                    while (_backStack.Count > 0)
                    {
                        _stackCurrentUI.Push(_backStack.Pop());
                    }

                    _stackCurrentUI.Push(baseUI);
                }
            }
            else
            {
                throw new Exception("UIManager catch an error");
            }
        }