Beispiel #1
0
        /// <summary>
        /// 特殊页面关闭当前页面,切换到空白的页面,主要用于场景切换时候后台加载UI
        /// </summary>
        public static void ChangeToBlankPage(bool isForceDestroyed)
        {
            if (CurUIBaseChangePage == null)
            {
                return;
            }
            string previousPageName = CurUIBaseChangePage != null ? CurUIBaseChangePage.PageName : string.Empty;

            CurUIBaseChangePage.HidePage(isForceDestroyed);
            CurUIBaseChangePage = null;

            EventManager.TriggerMessage((int)UIEventUsage.NotifyChangePage, previousPageName, string.Empty);
        }
Beispiel #2
0
        /// <summary>/// 保存创建的页面引用/// </summary>
        private static void TryCacheUIChangePage(UIBaseChangePage page)
        {
            if (page == null)
            {
                Debug.LogError("缓存的页面是空");
                return;
            }

            if (s_AllAliveUIChangePages.TryGetValue(page.PageName, out var cachePage) && cachePage != null && cachePage.IsPrefabInstanceEnable)
            {
                //   Debug.LogError($"重复 缓存的页面 {page.PageName}");
                return;
            }

            s_AllAliveUIChangePages[page.PageName] = page;
        }
Beispiel #3
0
        private static Dictionary <string, UIBaseChangePage> s_AllAliveUIChangePages = new Dictionary <string, UIBaseChangePage>(); //记录所有现在还在内存中的页面

        /// <summary>/// 切换到 另一个界面/// </summary>
        public static T OpenChangePage <T>(string pageName, string pagePath, LoadAssetChannelUsage loadAssetChannel = LoadAssetChannelUsage.Default) where T : UIBaseChangePage, new()
        {
            if (string.IsNullOrEmpty(pageName) || string.IsNullOrEmpty(pageName))
            {
                Debug.LogError("OpenChangePage Fail,Parameter is null");
                return(null);
            }

            if (CurUIBaseChangePage != null && (pageName == CurUIBaseChangePage.PageName))
            {
                Debug.LogError("页面无法切换到自身 " + pageName);
                return(CurUIBaseChangePage as T);
            } //自己切换到自己

            T targetPage = TryGetUIChangePageFromCache(pageName) as T; //首先检测缓存中的数据

            //创建界面
            if (targetPage == null || targetPage.IsPrefabInstanceEnable == false)
            {
                CreateUIPageInstance(pageName, pagePath, mUIChangePage, (goInstance) =>
                {
                    if (goInstance != null)
                    {
                        if (targetPage == null)
                        {
                            targetPage = new T();
                        }
                        else
                        {
                            targetPage.ResetPageForReConnectInstance();
                        }

                        targetPage.UIChangePageInitialed(pageName, pagePath, UIPageTypeEnum.ChangePage, goInstance);
                        TryCacheUIChangePage(targetPage);
                        targetPage.InstantiatePage(); //初始化

#if UNITY_EDITOR
                        //var debugShowScript = goInstance.GetAddComponentEx<Debug_ShowUIPageInfor>();
                        //debugShowScript.Initialed(targetPage);
#endif
                    }
                }, loadAssetChannel);
            }

            if (targetPage == null || targetPage.IsPrefabInstanceEnable == false)
            {
                Debug.LogError($"创建页面 pageName={pageName} pagePath={pagePath} ");
                return(null);
            }
            string previousPageName = CurUIBaseChangePage != null ? CurUIBaseChangePage.PageName : string.Empty;
            if (CurUIBaseChangePage != null)
            {
                CurUIBaseChangePage.HidePage(false);
                RecordChangePage(CurUIBaseChangePage.PageName);
            }

            CurUIBaseChangePage = targetPage;
            targetPage.ShowPage();
            EventManager.TriggerMessage((int)UIEventUsage.NotifyChangePage, previousPageName, CurUIBaseChangePage.PageName);
            return(targetPage);
        }
Beispiel #4
0
 /// <summary>/// 只在弹窗被真正销毁时候调用/// </summary>
 public static void RemoveUIChangePageFromCache(UIBaseChangePage pageName)
 {
     s_AllAliveUIChangePages.Remove(pageName.PageName);
 }
Beispiel #5
0
        /// <summary>///
        /// 返回到上一个界面
        /// /// </summary>
        public static void BackPage()
        {
            string           perviousPageName = string.Empty;
            UIBaseChangePage previouPage      = null;

            while (true)
            {
                if (s_ChangePageRecord.Count == 0)
                {
                    return;
                }
                perviousPageName = s_ChangePageRecord.Pop();
                if (string.IsNullOrEmpty(perviousPageName))
                {
                    continue;
                }

                if (CurUIBaseChangePage != null && perviousPageName == CurUIBaseChangePage.PageName)
                {
                    continue;
                }

                previouPage = TryGetUIChangePageFromCache(perviousPageName);
                if (previouPage == null)
                {
                    Debug.LogError($"无法返回到上一个界面 {perviousPageName} ,没有被记录的页面");
                    return;
                }

                if (previouPage.IsPrefabInstanceEnable == false)
                {
                    CreateUIPageInstance(previouPage.PageName, previouPage.mPagePath, mUIChangePage, (goInstance) =>
                    {
                        if (goInstance != null)
                        {
                            previouPage.ResetPageForReConnectInstance();

                            previouPage.UIChangePageInitialed(previouPage.PageName, previouPage.mPagePath, UIPageTypeEnum.ChangePage, goInstance);
                            previouPage.InstantiatePage(); //初始化

#if UNITY_EDITOR
                            //var debugShowScript = goInstance.GetAddComponentEx<Debug_ShowUIPageInfor>();
                            //debugShowScript.Initialed(previouPage);
#endif
                        }
                    }, LoadAssetChannelUsage.Default);
                }


                if (previouPage.IsPrefabInstanceEnable == false)
                {
                    continue; //说明上一个页面加载失败
                }
                string previousPageName = CurUIBaseChangePage != null ? CurUIBaseChangePage.PageName : string.Empty;
                if (CurUIBaseChangePage != null)
                {
                    CurUIBaseChangePage.HidePage(false);
                    RecordChangePage(previouPage.PageName);
                }

                CurUIBaseChangePage = previouPage;
                previouPage.ShowPage();
                EventManager.TriggerMessage((int)UIEventUsage.NotifyChangePage, previousPageName, CurUIBaseChangePage.PageName);
                return;
            }
        }