Ejemplo n.º 1
0
        //先尝试从缓存中打开,如果失败则打开一个新的
        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));
            }
        }
Ejemplo n.º 2
0
        //完全打开一个新的
        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);
        }
Ejemplo n.º 3
0
        //从池中获取界面
        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);
        }
Ejemplo n.º 4
0
        //读入界面
        private UIViewBase CreateUIView(SO_UIViewConfig config)
        {
            GameObject obj = null;

#if UNITY_EDITOR
            obj = UnityEditor.AssetDatabase.LoadAssetAtPath <GameObject>(string.Format("Assets/{0}/{1}.prefab", EGameConstL.GameName, config.BundleName));
            if (obj != null)
            {
                obj = Instantiate(obj);
            }
#endif

            if (obj)
            {
                obj.transform.CleanName();
                var viewBase = obj.GetComponent <UIViewBase>();
                return(viewBase);
            }

            UtilityHelper.LogError(string.Format("Load view error: no view : {0}", config.assetName));
            return(null);
        }
Ejemplo n.º 5
0
        //初始化界面配置
        private void InitViewConfig()
        {
            Object[] config = GetAssetsFromBundle("scriptableobjects/uiview.unity3d", typeof(SO_UIViewConfig));
            if (config != null)
            {
                for (int i = 0; i < config.Length; ++i)
                {
                    SO_UIViewConfig uvConfig = config[i] as SO_UIViewConfig;
                    if (uvConfig == null)
                    {
                        continue;
                    }

                    if (uvConfig.cacheScheme == UIViewCacheScheme.Cache)
                    {
                        uvConfig.unique = true;
                    }
                    uiViewConfig.Add(uvConfig.viewName, uvConfig);
                }
            }

            MgrLog("View config inited.");
        }