mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
refactor(ui): 重构UI路由基础功能
- 移除Show方法中基于实例的显示功能,简化接口设计 - 改进Hide方法实现,支持永久销毁和临时隐藏两种模式 - 添加Resume方法用于恢复已隐藏的UI界面 - 更新XML文档注释,提供更清晰的参数说明 - 优化代码结构和注释,提升代码可读性 - 调整IUiRouter接口定义,保持API一致性 - [release ci]
This commit is contained in:
parent
89227ff802
commit
f1e45385c4
@ -147,29 +147,27 @@ public interface IUiRouter : ISystem
|
||||
UiLayer layer,
|
||||
IUiPageEnterParam? param = null);
|
||||
|
||||
/// <summary>
|
||||
/// 在指定层级显示UI(Overlay / Modal / Toast等)
|
||||
/// </summary>
|
||||
/// <param name="page">要显示的UI页面行为对象</param>
|
||||
/// <param name="layer">UI显示的层级,例如 Overlay、Modal 或 Toast</param>
|
||||
/// <param name="param">传递给UI页面的初始化数据</param>
|
||||
/// <param name="enter">是否立即进入UI页面,默认为 false</param>
|
||||
void Show(
|
||||
IUiPageBehavior page,
|
||||
UiLayer layer,
|
||||
IUiPageEnterParam? param,
|
||||
bool enter = false);
|
||||
|
||||
/// <summary>
|
||||
/// 在指定层级显示UI(基于已存在实例)
|
||||
/// </summary>
|
||||
void Show(IUiPageBehavior page, UiLayer layer);
|
||||
|
||||
/// <summary>
|
||||
/// 隐藏指定层级的UI
|
||||
/// 隐藏指定层级的UI。
|
||||
/// </summary>
|
||||
/// <param name="uiKey">要隐藏的UI的唯一标识符。</param>
|
||||
/// <param name="layer">指定UI所在的层级。</param>
|
||||
/// <param name="destroy">是否销毁UI对象,默认为false,表示仅隐藏而不销毁。</param>
|
||||
void Hide(string uiKey, UiLayer layer, bool destroy = false);
|
||||
|
||||
/// <summary>
|
||||
/// 恢复指定层级的UI显示。
|
||||
/// </summary>
|
||||
/// <param name="uiKey">要恢复显示的UI的唯一标识符。</param>
|
||||
/// <param name="layer">指定UI所在的层级。</param>
|
||||
void Resume(string uiKey, UiLayer layer);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 清空指定层级的所有UI
|
||||
/// </summary>
|
||||
|
||||
@ -518,47 +518,24 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 在指定层级显示UI(基于实例)
|
||||
/// </summary>
|
||||
public void Show(
|
||||
IUiPageBehavior page,
|
||||
UiLayer layer,
|
||||
IUiPageEnterParam? param,
|
||||
bool enter = false)
|
||||
{
|
||||
if (layer == UiLayer.Page)
|
||||
throw new ArgumentException("Use Push() for Page layer");
|
||||
|
||||
var uiKey = page.Key;
|
||||
|
||||
if (!_layers.ContainsKey(layer))
|
||||
_layers[layer] = new Dictionary<string, IUiPageBehavior>();
|
||||
|
||||
_layers[layer][uiKey] = page;
|
||||
_uiRoot.AddUiPage(page, layer);
|
||||
|
||||
if (enter)
|
||||
page.OnEnter(param);
|
||||
|
||||
page.OnShow();
|
||||
|
||||
Log.Debug("Show existing UI instance in layer: {0}, layer={1}", uiKey, layer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 隐藏指定层级的UI
|
||||
/// 隐藏指定层级的UI。
|
||||
/// </summary>
|
||||
/// <param name="uiKey">要隐藏的UI的唯一标识符。</param>
|
||||
/// <param name="layer">UI所在的层级。</param>
|
||||
/// <param name="destroy">是否永久销毁UI。如果为true,则UI将被彻底移除;如果为false,则UI仅被隐藏,可后续恢复。</param>
|
||||
public void Hide(string uiKey, UiLayer layer, bool destroy = false)
|
||||
{
|
||||
// 尝试获取指定层级的UI字典,若不存在则直接返回
|
||||
if (!_layers.TryGetValue(layer, out var layerDict))
|
||||
return;
|
||||
|
||||
// 尝试获取指定UI键对应的页面对象,若不存在则直接返回
|
||||
if (!layerDict.TryGetValue(uiKey, out var page))
|
||||
return;
|
||||
|
||||
if (destroy)
|
||||
{
|
||||
// 永久移除
|
||||
// 永久移除UI:调用OnExit方法并从UI根节点和层级字典中移除该UI
|
||||
page.OnExit(); // ✅ 只在 Destroy 时 Exit
|
||||
_uiRoot.RemoveUiPage(page);
|
||||
layerDict.Remove(uiKey);
|
||||
@ -570,7 +547,7 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
||||
}
|
||||
else
|
||||
{
|
||||
// 临时隐藏(可恢复)
|
||||
// 临时隐藏UI:调用OnHide方法,保留UI状态以便后续恢复
|
||||
page.OnHide(); // ✅ Hide ≠ Exit
|
||||
|
||||
Log.Debug(
|
||||
@ -580,6 +557,28 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 恢复指定层级中已隐藏的UI。
|
||||
/// </summary>
|
||||
/// <param name="uiKey">要恢复的UI的唯一标识符。</param>
|
||||
/// <param name="layer">UI所在的层级。</param>
|
||||
public void Resume(string uiKey, UiLayer layer)
|
||||
{
|
||||
// 尝试获取指定层级的UI字典,若不存在则直接返回
|
||||
if (!_layers.TryGetValue(layer, out var layerDict))
|
||||
return;
|
||||
|
||||
// 尝试获取指定UI键对应的页面对象,若不存在则直接返回
|
||||
if (!layerDict.TryGetValue(uiKey, out var page))
|
||||
return;
|
||||
|
||||
// 调用OnShow和OnResume方法以恢复UI的显示和状态
|
||||
page.OnShow();
|
||||
page.OnResume();
|
||||
|
||||
Log.Debug("Resume UI in layer: {0}, layer={1}", uiKey, layer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 清空指定层级的所有UI
|
||||
/// </summary>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user