Ejemplo n.º 1
0
        //弹出一个指定窗口
        public void Popup(ViewBaseView view)
        {
            if (view == null)
            {
                return;
            }

            bool err = true;

            for (int i = views.Count - 1; i >= 0; --i)
            {
                if (views[i].GetInstanceID() == view.GetInstanceID())
                {
                    views.RemoveAt(i);
                    PopupSingleView(view);
                    err = false;
                    break;
                }
            }

            if (err)
            {
                UtilityLog.LogError(string.Format("Popup view failed. Can not find {0} in {1}", view.config.viewName, UIViewLayer));
                return;
            }

            //刷新最大order
            RefreshTopOrder();
        }
Ejemplo n.º 2
0
 //长期缓存
 private void CacheView(ViewBaseView view)
 {
     if (!screenUICache.Contains(view))
     {
         screenUICache.Add(view);
     }
 }
Ejemplo n.º 3
0
 //弹出单个界面
 private void PopupSingleView(ViewBaseView view)
 {
     if (view != null)
     {
         view.ViewOrder       = 0;
         view.layerController = null;
         view.OnPopup();
     }
 }
Ejemplo n.º 4
0
 //压入单个界面
 private void PushSingleView(ViewBaseView view)
 {
     if (view != null)
     {
         view.layerController = this;
         view.OnPush();
         view.ViewOrder = topOrder;
     }
 }
Ejemplo n.º 5
0
        //释放界面
        private void ReleaseView(ViewBaseView view)
        {
            if (view != null)
            {
                view.OnExit();

#if UNITY_EDITOR
                Destroy(view.gameObject);
#endif
            }
        }
Ejemplo n.º 6
0
 //放入层级中
 private void PushViewToLayer(ViewBaseView view, params object[] args)
 {
     if (view != null)
     {
         //设置参数
         // view.SetArguments(args);
         //添加到相应的列表
         viewList.Add(view);
         //压入对应的层中
         UIControllerViews[view.config.viewLayer].Push(view);
     }
 }
Ejemplo n.º 7
0
        //临时缓存
        private void TempCacheView(ViewBaseView view)
        {
            //没有设置池深度,直接释放
            if (screenUITempCacheDepth <= 0)
            {
                ReleaseView(view);
            }

            //放入临时池中
            screenUITempCache.Add(view);

            //整理临时缓存池
            TidyTempCache();
        }
Ejemplo n.º 8
0
        //展示界面
        public void ShowView(UIViewName viewName, params object[] args)
        {
            //获取界面配置
            UIViewConfig config = GetConfig(viewName);

            if (config == null)
            {
                return;
            }
            ViewBaseView view = null;

            if (config.unique)
            {
                //判断是否打开了
                for (int i = 0; i < viewList.Count; ++i)
                {
                    if (viewList[i].config.viewName == viewName)
                    {
                        view = viewList[i];
                        break;
                    }
                }
                //判断是否已被打开,没有打开个新的
                if (view != null)
                {
                    if (view.layerController == null)
                    {
                        UtilityLog.LogError(string.Format("Show view error: {0}, not layer", viewName));
                        return;
                    }
                    //设置参数,重新放入窗口层级控制器
                    // view.SetArguments(args);
                    view.layerController.Push(view);
                }
                else
                {
                    ShowViewFromCacheOrCreateNew(config, args);
                }
            }
            else
            {
                ShowViewFromCacheOrCreateNew(config, args);
            }
            //刷新显示、隐藏状态
            UpdateViewHideState();
        }
Ejemplo n.º 9
0
        //打开一个新的
        private ViewBaseView ShowNewView(UIViewConfig config)
        {
            if (!UIControllerViews.ContainsKey(config.viewLayer))
            {
                UtilityLog.LogError("Show new view failed. Layer error.");
                return(null);
            }
            //加载
            ViewBaseView view = CreateUIView(config);

            if (view)
            {
                //创建完毕,初始化
                view.Init();
                view.transform.SetParent(UIControllerViews[config.viewLayer].transform, false);
                view.GetComponent <RectTransform>().Normalize();
            }
            return(view);
        }
Ejemplo n.º 10
0
        //先尝试从缓存中打开,如果失败则打开一个新的
        private void ShowViewFromCacheOrCreateNew(UIViewConfig config, params object[] args)
        {
            //先尝试从缓存区中读取
            ViewBaseView view = GetViewFromCache(config);

            //缓存区内没有,打开新的
            if (view == null)
            {
                view = ShowNewView(config);
            }
            if (view != null)
            {
                PushViewToLayer(view, args);
            }
            else
            {
                UtilityLog.LogError(string.Format("Show view failed -> {0}", config.viewName));
            }
        }
Ejemplo n.º 11
0
        //根据指定界面
        public void HideView(ViewBaseView view)
        {
            if (view == null)
            {
                return;
            }

            //在窗口栈中的界面都可以关闭
            if (view.layerController != null)
            {
                viewList.Remove(view);
                view.layerController.Popup(view);
                SchemeViewCache(view);
                UpdateViewHideState();
            }
            else
            {
                UtilityLog.LogError(string.Format("Attamp to hide a error view {0}, not in controller.", view.config.viewName));
            }
        }
Ejemplo n.º 12
0
        //从池中获取界面
        private ViewBaseView GetViewFromCache(UIViewConfig config)
        {
            if (config == null)
            {
                return(null);
            }

            ViewBaseView        view  = null;
            List <ViewBaseView> 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);
        }
Ejemplo n.º 13
0
        //根据缓存类型处理界面
        private void SchemeViewCache(ViewBaseView 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;
                }
            }
        }
Ejemplo n.º 14
0
 //压入一个新的窗口(设置为最大order)
 public void Push(ViewBaseView 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);
     }
 }