/// <summary> /// 打开一个弹窗界面 /// </summary> /// <param name="popupOperate"></param> /// <param name="belongPageView">当前弹窗属于哪个Page 管理 ,如果=null则表示属于当前打开的界面 否则指定的参数界面 </param> /// <param name="isFailRecord">如果是因为优先级而无法弹出 则表示是否需要记录 如果为false 则当无法显示时候不会自动弹出,而是隐藏了</param> /// <param name="parameter"></param> /// public void OpenPopUp(PopupOpenOperateEnum popupOperate, UIBasePageView belongPageView, bool isFailRecord, UIParameterArgs parameter) { if (parameter == null) { Debug.LogError("parameter 不要使用null 使用默认的 UIParameterArgs.Create() 无参数方法替代"); return; } #if UNITY_EDITOR if (this.WindowType != WindowTypeEnum.PopUp) { Debug.LogError("OpenPopUp Fail,Not Popup Window " + this.name); return; } #endif Dictionary <int, UIBasePopupView> allWillHidePopupView = GetWillHidePopupView(this, popupOperate, isFailRecord, parameter); foreach (var item in allWillHidePopupView) { item.Value.HideWindow(UIParameterArgs.Create()); m_AllRecordViewPopup.RemoveAt(item.Key); } if (belongPageView == null) { belongPageView = UIBasePageView.CurOpenPage; } UIParameterArgs args0 = UIParameterArgs.Create(belongPageView, isFailRecord); this.ShowWindow(Helper.Instance.MegerUIParameter(args0, parameter)); //注意这里的第一个参数 m_AllRecordViewPopup.Add(this); }
private void OnLoginBtnClick() { if (m_IsShowPassworld) { Debug.LogEditorInfor("OnLoginBtnClick >密码>" + m_InputFieldProPasswordInputField.text); } int playerNameCharCount = System.Text.Encoding.Default.GetBytes(m_inputNameInputField.text).Length; int playerPasswordCharCount = System.Text.Encoding.Default.GetBytes(m_InputFieldProPasswordInputField.text).Length; if (playerNameCharCount < S_MinPlayerNameCharLimt || playerNameCharCount > S_MaxPlayerNameCharLimt) { Debug.LogError("用户名不合法"); UIHelper.Instance.ShowTipsViewSync(string.Format(m_PlayerNameCharLimitStr, S_MinPlayerNameCharLimt, S_MaxPlayerNameCharLimt), 2); return; } if (playerPasswordCharCount < S_MinPlayerPasswordCharLimt || playerPasswordCharCount > S_MaxPlayerPasswordCharLimt) { Debug.LogError("用户密码不合法"); UIHelper.Instance.ShowTipsViewSync(string.Format(m_PlayerPasswordCharLimitStr, S_MinPlayerPasswordCharLimt, S_MaxPlayerPasswordCharLimt), 2); return; } string inputPassworld = m_InputFieldProPasswordInputField.text; inputPassworld = inputPassworld.Trim(); if (inputPassworld != m_RealPassworld) { if (m_LoginAccount == null) { m_LoginAccount = new LocalAccountInfor(m_PreviousInputPlayerName, m_PreviousInputPlayerPassword); } Debug.Log("保存账户信息"); LocalAccountMgr.Instance.UpdateLocalAccount(m_LoginAccount); } //更新本地账户列表 if (UIViewReference.Instance.UiAssetUpdateView != null && UIViewReference.Instance.UiAssetUpdateView.IsActivate) { UIViewReference.Instance.UiAssetUpdateView.ClosePage(UIParameterArgs.Create(), UIParameterArgs.Create()); } UIViewReference.Instance.UiCanvasMaskView.OpenWidget(UIManagerHelper.Instance.WidgetParentTrans, 0, true, UIParameterArgs.Create()); AppSceneManager.Instance.LoadSceneAsync(SceneNameEnum.StartUp, LoadSceneModeEnum.KeepPrevious, (isComplete) => { UIViewReference.Instance.UiCanvasMaskView.CloseWidget(false, UIParameterArgs.Create(false, true)); if (isComplete) { Debug.LogInfor("应用已经起来了..Go!!!"); } }, () => { Debug.LogInfor("卸载其他场景完成"); } ); }
/// <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 } }
/// <summary> /// 显示Widget /// </summary> /// <param name="view"></param> /// <param name="parentTrans"></param> /// <param name="showTime"></param> /// <param name="isSingleton"></param> /// <param name="parameter"></param> private void ShowWidgetView(UIBaseWidgetView view, Transform parentTrans, float showTime, bool isSingleton, UIParameterArgs parameter) { if (view.rectransform.parent != parentTrans) { view.rectransform.SetParent(parentTrans); } view.rectransform.ResetRectTransProperty(); UIParameterArgs parameter1 = UIParameterArgs.Create(parentTrans, showTime, isSingleton); view.ShowWindow(Helper.Instance.MegerUIParameter(parameter1, parameter)); }
/// <summary> /// 关闭页面时候 关闭关联的已经打开的弹窗 /// </summary> /// <param name="pageview"></param> public static void CloseConnectPopupView(UIBasePageView belongPageView) { if (belongPageView == null) { Debug.LogError("ClosePopupView Is Null Page"); return; } for (int dex = m_AllRecordViewPopup.Count - 1; dex >= 0; --dex) { if (m_AllRecordViewPopup[dex].BelongPageView == belongPageView) { m_AllRecordViewPopup[dex].HideWindow(UIParameterArgs.Create()); m_AllRecordViewPopup.RemoveAt(dex); } } }
/// <summary> /// 关闭所有关联改物体的Widget /// </summary> /// <param name="targetTrans"></param> public static void CloseAttachWidget(Transform targetTrans, bool isDestroyWidget, UIParameterArgs parameter) { if (m_AllWidgetView.ContainsKey(targetTrans) == false) { return; } if (parameter == null) { Debug.LogError("parameter 不要使用null 使用默认的 UIParameterArgs.Create() 无参数方法替代"); return; } for (int dex = 0; dex < m_AllWidgetView[targetTrans].Count; ++dex) { UIParameterArgs parameter1 = UIParameterArgs.Create(isDestroyWidget); m_AllWidgetView[targetTrans][dex].HideWindow(Helper.Instance.MegerUIParameter(parameter1, parameter)); } if (isDestroyWidget) { m_AllWidgetView[targetTrans].Clear(); } }
/// <summary> /// 关闭打开的Widget /// </summary> /// <param name="view"></param> /// <param name="isDestroyWidget"></param> public void CloseWidget(bool isDestroyWidget, UIParameterArgs parameter) { if (m_AllWidgetView.ContainsKey(this.BelongParent) == false) { Debug.LogError("CloseWidget Fail,Not Exit " + this.name); return; } if (parameter == null) { Debug.LogError("parameter 不要使用null 使用默认的 UIParameterArgs.Create() 无参数方法替代"); return; } int Index = -1; for (int dex = 0; dex < m_AllWidgetView[this.BelongParent].Count; ++dex) { if (m_AllWidgetView[this.BelongParent][dex] == this) { Index = dex; break; } } if (Index == -1) { Debug.LogError("CloseWidget Fail,Not Exit " + this.name); return; } UIParameterArgs parameter1 = UIParameterArgs.Create(isDestroyWidget); this.HideWindow(Helper.Instance.MegerUIParameter(parameter1, parameter)); if (isDestroyWidget) { m_AllWidgetView[this.BelongParent].RemoveAt(Index); } }
private void CloseBtnClick() { HideWindow(UIParameterArgs.Create()); }
private void OnStartUpBtnClick() { if (AssetUpdateMgr.Instance.IsUpdateError) { Debug.LogError("无法启动游戏 资源更新失败"); return; } //UIManager.Instance.ForceGetUIAsync<UILoginPopupView>(Define_ResPath.UILoginPopupViewPath, UIManagerHelper.Instance.PopupParentTrans, (loginPopView) => //{ // UIManager.Instance.OpenPopUp(loginPopView, PopupOpenOperateEnum.KeepPreviousAvailable,this, true, null); //}, true, true); UIViewReference.Instance.UiLoginPopupView.OpenPopUp(PopupOpenOperateEnum.KeepPreviousAvailable, this, true, UIParameterArgs.Create()); }
/// <summary> /// 关闭一个弹窗界面 /// </summary> /// <param name="view"></param> /// <param name="closeOperate"></param> public void ClosePopup(PopupCloseOperateEnum closeOperate) { this.HideWindow(UIParameterArgs.Create()); m_AllRecordViewPopup.Remove(this); DealHidePopView(closeOperate); }
/// <summary> /// 打开一个弹窗界面 (默认按照优先级打开 ,如果优先级不够则不会弹出) /// </summary> /// <param name="popupOperate"></param> public void OpenPopUp(bool isFailRecord = true) { OpenPopUp(PopupOpenOperateEnum.PriorityOrder, UIBasePageView.CurOpenPage, isFailRecord, UIParameterArgs.Create()); }
/// <summary> /// 打开一个弹窗界面 (属于当前页面的) /// </summary> /// <param name="popupOperate"></param> /// <param name="isFailRecord">如果是因为优先级而无法弹出 则表示是否需要记录 如果为false 则当无法显示时候不会自动弹出,而是隐藏了</param> public void OpenPopUp(PopupOpenOperateEnum popupOperate, bool isFailRecord = true) { OpenPopUp(popupOperate, UIBasePageView.CurOpenPage, isFailRecord, UIParameterArgs.Create()); }