public void Push <T>(bool allowMulti = false, params object[] parameters) where T : UIView { string assetPath = CheckAssetPath(typeof(T)); if (string.IsNullOrEmpty(assetPath)) { return; } int hashCode = typeof(T).GetHashCode(); if (_stackUiAsset.Count > 0) { UiAsset uiAsset = _stackUiAsset.Peek(); //如果界面已经打开 则不在执行 if (uiAsset.AssetPath == assetPath && !allowMulti) { return; } IUIView uiView = GetUiView(uiAsset); //触发暂停事件 _uiPauseArgs.UIView = uiView; _event.Trigger(this, _uiPauseArgs); uiView.OnPause(); } UiAsset newUiAsset = null; if (!allowMulti) { if (!_allUiAssets.TryGetValue(hashCode, out newUiAsset)) { newUiAsset = new UiAsset(assetPath); _allUiAssets[hashCode] = newUiAsset; } } else { newUiAsset = new UiAsset(assetPath); } _stackUiAsset.Push(newUiAsset); UIView newUiView = GetUiView(newUiAsset); newUiView.OnEnter(parameters); //触发打开事件 _uiEnterArgs.UIView = newUiView; _event.Trigger(this, _uiEnterArgs); }
//获取ui界面 private UIView GetUiView(UiAsset uiAsset) { UIView uiView; if (!_allUiViews.TryGetValue(uiAsset, out uiView)) { GameObject uiViewSource = _resource.LoadAsset <GameObject>(uiAsset.AssetPath); if (uiViewSource == null) { return(null); } GameObject uiViewClone = GameObject.Instantiate(uiViewSource); uiView = uiViewClone.GetComponent <UIView>(); if (uiView == null) { return(null); } _allUiViews[uiAsset] = uiView; return(_allUiViews[uiAsset]); } uiView.gameObject.SetActive(true); return(uiView); }
public void Pop(bool isDestory = false) { //移除当前UI if (_stackUiAsset.Count > 0) { UiAsset lastUiAsset = _stackUiAsset.Pop(); UIView lastUiView; if (_allUiViews.TryGetValue(lastUiAsset, out lastUiView)) { //触发关闭事件 _uiExitArgs.UIView = lastUiView; _event.Trigger(this, _uiExitArgs); lastUiView.OnExit(); if (isDestory) { _allUiViews.Remove(lastUiAsset); MonoBehaviour.Destroy(lastUiView); } else { lastUiView.gameObject.SetActive(false); } } } if (_stackUiAsset.Count > 0) { UiAsset uiAsset = _stackUiAsset.Peek(); UIView lastUiView = GetUiView(uiAsset); lastUiView.OnResume(); //触发恢复事件 _uiResumeArgs.UIView = lastUiView; _event.Trigger(this, _uiResumeArgs); } }