/// <summary> /// 处理关闭当前弹窗时候的逻辑 /// </summary> /// <param name="view"></param> /// <param name="closeOperate"></param> private void DealHidePopView(PopupCloseOperateEnum closeOperate) { if (m_AllRecordViewPopup.Count == 0) { return; } UIBasePopupView nectShowPage = null; //关闭这个弹窗口这个弹窗打开之前的弹窗 switch (closeOperate) { case PopupCloseOperateEnum.Simple: break; case PopupCloseOperateEnum.AutoPopup: for (int dex = m_AllRecordViewPopup.Count - 1; dex >= 0; --dex) { if (dex > 0 && m_AllRecordViewPopup[dex] == this) { nectShowPage = m_AllRecordViewPopup[dex - 1]; break; } } AutoPupupView(nectShowPage); break; case PopupCloseOperateEnum.CloseAndClearCurPage: List <int> allPopupViewCurPage = new List <int>(); for (int dex = m_AllRecordViewPopup.Count - 1; dex >= 0; --dex) { if (m_AllRecordViewPopup[dex] != this && m_AllRecordViewPopup[dex].BelongPageView == this.BelongPageView) { allPopupViewCurPage.Add(dex); } } for (int dex = 0; dex < allPopupViewCurPage.Count; ++dex) { m_AllRecordViewPopup[dex].HideWindow(UIParameterArgs.Create()); } //关闭弹窗 allPopupViewCurPage.Reverse(); for (int dex = 0; dex < allPopupViewCurPage.Count; ++dex) { m_AllRecordViewPopup.RemoveAt(allPopupViewCurPage[dex]); } //删除打开记录 if (m_LowerPriorityPopupView.ContainsKey(this.BelongPageView)) { m_LowerPriorityPopupView[this.BelongPageView].Clear(); } break; default: Debug.LogError("没有处理的类型 " + closeOperate); break; } }
/// <summary> /// 打开一个弹窗时候根据需求 获取需要关闭的弹窗 /// </summary> /// <param name="view"></param> /// <param name="popupOperate"></param> private Dictionary <int, UIBasePopupView> GetWillHidePopupView(UIBasePopupView popupView, PopupOpenOperateEnum popupOperate, bool isFailRecord, UIParameterArgs parameter) { Dictionary <int, UIBasePopupView> allWillHidePopupView = new Dictionary <int, UIBasePopupView>(); if (m_AllRecordViewPopup.Count == 0) { return(allWillHidePopupView); } switch (popupOperate) { case PopupOpenOperateEnum.KeepPreviousAvailable: break; case PopupOpenOperateEnum.HideAllOpenView: for (int dex = 0; dex < m_AllRecordViewPopup.Count; ++dex) { allWillHidePopupView.Add(dex, m_AllRecordViewPopup[dex]); } break; case PopupOpenOperateEnum.HideCurPagePopupView: for (int dex = 0; dex < m_AllRecordViewPopup.Count; ++dex) { if (m_AllRecordViewPopup[dex].BelongPageView == popupView.BelongPageView) { allWillHidePopupView.Add(dex, m_AllRecordViewPopup[dex]); } } //获取当前弹窗所属的页面 break; case PopupOpenOperateEnum.PriorityOrder: if (m_AllRecordViewPopup[m_AllRecordViewPopup.Count - 1].Priority >= popupView.Priority) { if (isFailRecord) { RecordWillPopupView(popupView.BelongPageView, popupView); popupView.FailShowByPriority(parameter); //记录参数 } else { popupView.HideWindow(UIParameterArgs.Create()); } } //加入到待弹出界面中 else { allWillHidePopupView.Add(m_AllRecordViewPopup.Count - 1, m_AllRecordViewPopup[m_AllRecordViewPopup.Count - 1]); } break; default: Debug.LogError("没有处理的枚举类型 " + popupOperate); break; } return(allWillHidePopupView); }
/// <summary> /// 关闭一个页面所有关联的Popup /Widget /// </summary> /// <param name="view"></param> private void ClosePageConnectView(UIBasePageView view) { if (view != null) { view.HideWindow(UIParameterArgs.Create()); UIBasePopupView.RemoveWillPopupView(view); //关闭当前界面所包含的弹窗(没有弹出的) UIBasePopupView.CloseConnectPopupView(view); //关闭当前界面所包含的弹窗 (已经弹出的) UIBaseWidgetView.CloseAttachWidget(view.transform, false, UIParameterArgs.Create()); //关闭关联的Widget } }
//public static void CloseAllPopupView() //{ // Debug.LogEditorInfor("TODO..."); //} /// <summary> /// 记录需要弹出来的窗口 /// </summary> /// <param name="pageview"></param> /// <param name="popupView"></param> private void RecordWillPopupView(UIBasePageView pageview, UIBasePopupView popupView) { if (pageview == null || popupView == null) { Debug.LogError("RecordWillPopupView Fail " + (pageview == null) + " ::" + (popupView == null)); return; } if (m_LowerPriorityPopupView.ContainsKey(pageview) == false) { List <UIBasePopupView> pagePopupView = new List <UIBasePopupView>(); pagePopupView.Add(popupView); m_LowerPriorityPopupView.Add(pageview, pagePopupView); } else { m_LowerPriorityPopupView[pageview].Add(popupView); #if UNITY_EDITOR Debug.LogEditorInfor("排序前的顺序"); for (int dex = 0; dex < m_LowerPriorityPopupView[pageview].Count; ++dex) { Debug.LogEditorInfor("dex={0} popupView={1 } priority={2}", dex, m_LowerPriorityPopupView[pageview][dex], m_LowerPriorityPopupView[pageview][dex].Priority); } #endif SortPopupViewByPriority(m_LowerPriorityPopupView[pageview]); // //按照优先级从低到高排序 //m_LowerPriorityPopupView[pageview].Sort((a, b) => //{ // if (a.Priority > b.Priority) // return 1; // else if (a.Priority == b.Priority) // return 0; // else return -1; //}); //按照优先级从低到高排序 #if UNITY_EDITOR Debug.LogEditorInfor("排序后的顺序"); for (int dex = 0; dex < m_LowerPriorityPopupView[pageview].Count; ++dex) { Debug.LogEditorInfor("dex={0} popupView={1 } priority={2}", dex, m_LowerPriorityPopupView[pageview][dex], m_LowerPriorityPopupView[pageview][dex].Priority); } #endif } }
/// <summary> /// 当关闭一个弹窗界面时候 检查并弹出优先级比要显示的弹窗优先级高的弹窗 /// </summary> /// <param name="popupView">关闭一个弹窗后下面的一个弹窗 (可以是null)</param> /// <returns>标识</returns> private void AutoPupupView(UIBasePopupView popupView) { List <UIBasePopupView> willPopupView = null; if (popupView != null) { if (m_LowerPriorityPopupView.TryGetValue(popupView.BelongPageView, out willPopupView)) { if (willPopupView.Count == 0) { return; } if (willPopupView[willPopupView.Count - 1].Priority > popupView.Priority) { UIBasePopupView willShowPopupView = willPopupView[willPopupView.Count - 1]; //将要显示的弹窗 willShowPopupView.DelayPopupShowWindow(); //参数已经缓存 willPopupView.RemoveAt(willPopupView.Count - 1); //移除队列 m_AllRecordViewPopup.Add(willShowPopupView); //将要显示的弹窗 } } } else { if (m_LowerPriorityPopupView.TryGetValue(UIBasePageView.CurOpenPage, out willPopupView)) { if (willPopupView.Count == 0) { return; } UIBasePopupView willShowPopupView = willPopupView[willPopupView.Count - 1]; //将要显示的弹窗 willShowPopupView.DelayPopupShowWindow(); //参数已经缓存 willPopupView.RemoveAt(willPopupView.Count - 1); //移除队列 m_AllRecordViewPopup.Add(willShowPopupView); //将要显示的弹窗 } //取当前打开页面的队列表 } //可能存在关闭一个顶层弹窗后 后下面没有要显示的弹窗的情况 }