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,
|
UiLayer layer,
|
||||||
IUiPageEnterParam? param = null);
|
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>
|
/// <summary>
|
||||||
/// 在指定层级显示UI(基于已存在实例)
|
/// 在指定层级显示UI(基于已存在实例)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void Show(IUiPageBehavior page, UiLayer layer);
|
void Show(IUiPageBehavior page, UiLayer layer);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 隐藏指定层级的UI
|
/// 隐藏指定层级的UI。
|
||||||
/// </summary>
|
/// </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);
|
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>
|
/// <summary>
|
||||||
/// 清空指定层级的所有UI
|
/// 清空指定层级的所有UI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@ -518,47 +518,24 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 在指定层级显示UI(基于实例)
|
/// 隐藏指定层级的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
|
|
||||||
/// </summary>
|
/// </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)
|
public void Hide(string uiKey, UiLayer layer, bool destroy = false)
|
||||||
{
|
{
|
||||||
|
// 尝试获取指定层级的UI字典,若不存在则直接返回
|
||||||
if (!_layers.TryGetValue(layer, out var layerDict))
|
if (!_layers.TryGetValue(layer, out var layerDict))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// 尝试获取指定UI键对应的页面对象,若不存在则直接返回
|
||||||
if (!layerDict.TryGetValue(uiKey, out var page))
|
if (!layerDict.TryGetValue(uiKey, out var page))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (destroy)
|
if (destroy)
|
||||||
{
|
{
|
||||||
// 永久移除
|
// 永久移除UI:调用OnExit方法并从UI根节点和层级字典中移除该UI
|
||||||
page.OnExit(); // ✅ 只在 Destroy 时 Exit
|
page.OnExit(); // ✅ 只在 Destroy 时 Exit
|
||||||
_uiRoot.RemoveUiPage(page);
|
_uiRoot.RemoveUiPage(page);
|
||||||
layerDict.Remove(uiKey);
|
layerDict.Remove(uiKey);
|
||||||
@ -570,7 +547,7 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// 临时隐藏(可恢复)
|
// 临时隐藏UI:调用OnHide方法,保留UI状态以便后续恢复
|
||||||
page.OnHide(); // ✅ Hide ≠ Exit
|
page.OnHide(); // ✅ Hide ≠ Exit
|
||||||
|
|
||||||
Log.Debug(
|
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>
|
/// <summary>
|
||||||
/// 清空指定层级的所有UI
|
/// 清空指定层级的所有UI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user