/// <summary> /// 处理退出选项 /// </summary> private void ProcessQuitOptions(IntGroup viewGroup, QuitOptions options) { if (options.HasFlag(QuitOptions.LeaveStack)) { ProcessLeaveStack(viewGroup); } }
/// <summary> /// 退出视图 /// </summary> /// <param name="viewId">视图id</param> /// <param name="options">选项</param> /// <param name="callback">退出完成回调</param> public void Quit(int viewId, QuitOptions options = QuitOptions.None, Action callback = null) { ViewState state; if (_viewDic.TryGetValue(viewId, out state)) { if (state.active) { state.active = false; _viewDic[viewId] = state; OnViewQuitStartEvent?.Invoke(viewId); _uiModule?.Quit(viewId, () => { callback?.Invoke(); _uiModule?.UnFocus(viewId); OnViewQuitCompletedEvent?.Invoke(viewId); }, options.HasFlag(QuitOptions.Destroy)); } else { callback?.Invoke(); } } else { callback?.Invoke(); } ProcessQuitOptions(IntGroup.Get(viewId), options); }
/// <summary> /// 转化选项 /// </summary> private QuitOptions ToOptions(bool leaveStack, bool destroy) { QuitOptions result = QuitOptions.None; if (leaveStack) { result |= QuitOptions.LeaveStack; } if (destroy) { result |= QuitOptions.Destroy; } return(result); }
/// <summary> /// 退出所有视图 /// </summary> /// <param name="options">选项</param> public void QuitAll(QuitOptions options = QuitOptions.None) { _tempQuitList.Clear(); foreach (int id in _viewDic.Keys) { _tempQuitList.Add(id); } for (int i = 0; i < _tempQuitList.Count; i++) { Quit(_tempQuitList[i], QuitOptionsFilter(QuitOptions.LeaveStack, options), null); } if (options.HasFlag(QuitOptions.LeaveStack)) { ResetStack(); } }
/// <summary> /// 退出视图 /// </summary> /// <param name="viewGroup">视图组</param> /// <param name="options">选项</param> /// <param name="callback">完成回调</param> public void Quit(IntGroup viewGroup, QuitOptions options = QuitOptions.None, Action callback = null) { int all = viewGroup.Count; int done = 0; for (int i = 0; i < all; i++) { Quit(viewGroup[i], QuitOptionsFilter(QuitOptions.LeaveStack, options), () => { done++; if (done >= all) { callback?.Invoke(); } }); } ProcessQuitOptions(viewGroup, options); }
/// <summary> /// 退出所有视图 /// 会有部分视图驻留 /// </summary> /// <param name="stayViewGroup">驻留视图组</param> /// <param name="options">退出的视图选项</param> /// <param name="stayOptions">驻留的视图选项</param> public void QuitAll(IntGroup stayViewGroup, QuitOptions options = QuitOptions.None, StayOptions stayOptions = StayOptions.None) { _tempQuitList.Clear(); foreach (int id in _viewDic.Keys) { if (!stayViewGroup.Contains(id)) { _tempQuitList.Add(id); } } for (int i = 0; i < _tempQuitList.Count; i++) { Quit(_tempQuitList[i], QuitOptionsFilter(QuitOptions.LeaveStack, options), null); } if (options.HasFlag(QuitOptions.LeaveStack)) { ResetStack(); } ProcessStayOptions(stayViewGroup, stayOptions); }
/// <summary> /// 退出所有视图 /// 会有部分视图驻留 /// </summary> /// <param name="stayViewId">驻留视图</param> /// <param name="options">退出的视图选项</param> /// <param name="stayOptions">驻留的视图选项</param> public void QuitAll(int stayViewId, QuitOptions options = QuitOptions.None, StayOptions stayOptions = StayOptions.None) { _module.QuitAll(stayViewId, options, stayOptions); }
/// <summary> /// 退出所有视图 /// 会有部分视图驻留 /// </summary> /// <param name="stayViewGroup">驻留视图组</param> /// <param name="options">退出的视图选项</param> /// <param name="stayOptions">驻留的视图选项</param> public void QuitAll(IntGroup stayViewGroup, QuitOptions options = QuitOptions.None, StayOptions stayOptions = StayOptions.None) { _module.QuitAll(stayViewGroup, options, stayOptions); }
/// <summary> /// 退出所有视图 /// </summary> public void QuitAll(QuitOptions options = QuitOptions.None) { _module.QuitAll(options); }
/// <summary> /// 退出视图 /// </summary> /// <param name="viewGroup">视图组</param> /// <param name="options">选项</param> /// <param name="callback">完成回调</param> public void Quit(IntGroup viewGroup, QuitOptions options = QuitOptions.None, Action callback = null) { _module.Quit(viewGroup, options, callback); }
/// <summary> /// 退出视图 /// </summary> /// <param name="viewId">视图id</param> /// <param name="options">选项</param> /// <param name="callback">退出完成回调</param> public void Quit(int viewId, QuitOptions options = QuitOptions.None, Action callback = null) { _module.Quit(viewId, options, callback); }
/// <summary> /// 退出选项过滤器 /// </summary> private QuitOptions QuitOptionsFilter(QuitOptions filter, QuitOptions src) { return(src & (~filter)); }
/// <summary> /// 退出所有视图 /// 会有部分视图驻留 /// </summary> /// <param name="stayViewId">驻留视图</param> /// <param name="options">退出的视图选项</param> /// <param name="stayOptions">驻留的视图选项</param> public void QuitAll(int stayViewId, QuitOptions options = QuitOptions.None, StayOptions stayOptions = StayOptions.None) { QuitAll(IntGroup.Get(stayViewId), options, stayOptions); }