/// <summary> /// 打开面板 /// </summary> public void OpenPanel(string uiname, bool closable, params object[] args) { PanelBase panel = GetPanel(uiname); if (null == panel) { return; } if (m_OnDisplayPanelDic.ContainsKey(panel.Level)) { if (m_OnDisplayPanelDic[panel.Level].Contains(panel)) { if (closable) { ClosePanel(uiname); } return; } } else { m_OnDisplayPanelDic.Add(panel.Level, new List <PanelBase>()); } m_OnDisplayPanelDic[panel.Level].Add(panel); if (m_OnDisplayPanelDic.ContainsKey(panel.Level - 1)) // 可以改为 if(panel.level > 0) { m_OnDisplayPanelDic[panel.Level - 1].End().OnPause(); } panel.OnOpen(args); }
/// <summary> /// 把某个页面入栈, 把某个页面显示在界面上 /// </summary> public void PushPanel(string uiname, bool colsable, params object[] args) { if (m_PanelStack == null) { m_PanelStack = new Stack <PanelBase>(); } PanelBase nextPanel = GetPanel(uiname); // 计划打开的页面 PanelBase currentPanel = null; // 最近一次关闭的界面 // 判断一下栈里面是否有页面 if (m_PanelStack.Count > 0) { PanelBase topPanel = m_PanelStack.Peek(); // 获取栈顶页面 // 如果即将打开的页面是栈顶页面,即关闭栈顶页面 if (topPanel == nextPanel) { if (colsable) { PopPanel(); } return; } // 当栈内有面板时,进行判断 while (m_PanelStack.Count > 0) { if (topPanel.Level < nextPanel.Level) { break; } // 如果栈顶页面的层级不小于要打开的页面层级,关闭它并保存 currentPanel = PopPanel(); if (m_PanelStack.Count > 0) { topPanel = m_PanelStack.Peek(); } } } // 如果最后关闭的界面和要打开的是同一个,就不打开了 if (currentPanel != nextPanel) { nextPanel.OnOpen(args); m_PanelStack.Push(nextPanel); // 将打开的面板入栈 } }