//完全打开一个新的 private UIViewBase ShowNewView(SO_UIViewConfig config) { if (!viewDic.ContainsKey(config.viewLayer)) { UtilityHelper.LogError("Show new view failed. Layer error."); return(null); } //加载 UIViewBase view = CreateUIView(config); if (view) { //创建完毕,初始化 view.Init(); view.transform.SetParent(viewDic[config.viewLayer].transform); view.GetComponent <RectTransform>().Normalize(); } return(view); }
//先尝试从缓存中打开,如果失败则打开一个新的 private void ShowViewFromCacheOrCreateNew(SO_UIViewConfig config, params object[] args) { //先尝试从缓存区中读取 UIViewBase view = GetViewFromCache(config); //缓存区内没有,打开新的 if (view == null) { view = ShowNewView(config); } if (view != null) { PushViewToLayer(view, args); } else { UtilityHelper.LogError(string.Format("Show view failed -> {0}", config.viewName)); } }
//根据指定界面 public void HideView(UIViewBase view) { if (view == null) { return; } //在窗口栈中的界面都可以关闭 if (view.layerController != null) { viewList.Remove(view); view.layerController.Popup(view); SchemeViewCache(view); UpdateViewHideState(); } else { UtilityHelper.LogError(string.Format("Attamp to hide a error view {0}, not in controller.", view.config.viewName)); } }
//从池中获取界面 private UIViewBase GetViewFromCache(SO_UIViewConfig config) { if (config == null) { return(null); } UIViewBase view = null; List <UIViewBase> cache = null; switch (config.cacheScheme) { case UIViewCacheScheme.Cache: cache = screenUICache; break; case UIViewCacheScheme.TempCache: cache = screenUITempCache; break; default: break; } if (cache != null) { for (int i = 0; i < cache.Count; ++i) { if (cache[i].config.viewName == config.viewName) { view = cache[i]; //从缓冲区中移除 cache.RemoveAt(i); break; } } } return(view); }
//移除全部 public UIViewBase[] PopupAll() { if (views.Count == 0) { return(null); } UIViewBase cur = null; UIViewBase[] allViews = views.ToArray(); if (views.Count > 0) { for (int i = views.Count - 1; i >= 0; --i) { cur = views[i]; views.RemoveAt(i); PopupSingleView(cur); } topOrder = 0; } return(allViews); }
//根据缓存类型处理界面 private void SchemeViewCache(UIViewBase view) { if (view != null) { //根据缓存类型处理 switch (view.config.cacheScheme) { case UIViewCacheScheme.Cache: CacheView(view); break; case UIViewCacheScheme.TempCache: TempCacheView(view); break; case UIViewCacheScheme.AutoRemove: ReleaseView(view); break; default: break; } } }
//压入一个新的窗口(设置为最大order) public void Push(UIViewBase view) { //判断是否本来就在这个队列中 if (view.layerController != null) { if (view.ViewOrder == topOrder) { return; } else { views.Remove(view); views.Add(view); topOrder += viewOrderStep; view.ViewOrder = topOrder; } } else { views.Add(view); topOrder += viewOrderStep; PushSingleView(view); } }