/// <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); }
/// <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; }
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); }
/// <summary>/// 只在弹窗被真正销毁时候调用/// </summary> public static void RemoveUIChangePageFromCache(UIBaseChangePage pageName) { s_AllAliveUIChangePages.Remove(pageName.PageName); }
/// <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; } }