/// <summary> /// 把某个页面入栈,把某个页面显示在界面 上 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="panelType"></param> /// <param name="resource">是否是热更加载 </param> /// <param name="param"></param> /// <returns></returns> public BaseUI PushPanel <T>(UIPanelTypeEnum panelType, bool resource = false, object param1 = null, object param2 = null, object param3 = null) where T : BaseUI, new() { //判断一下栈里面是否有页面 if (mPanelStack.Count > 0) { BaseUI curPanel = mPanelStack.Peek(); if (curPanel.IsHotFix) { ILRuntimeManager.Instance.AppDomainCtrl.Invoke(curPanel.HotFixClassName, "OnPause", curPanel); } else { curPanel.OnPause(); } } mCurSiblingIndex++; BaseUI panel = GetPanel <T>(panelType, resource); panel.IsHotFix = !resource; panel.SetSiblingIndex(ViewSiblingIndex.LOW + mCurSiblingIndex); mPanelStack.Push(panel); if (panel.IsHotFix) { ILRuntimeManager.Instance.AppDomainCtrl.Invoke(panel.HotFixClassName, "OnEnter", panel, param1, param2, param3); } else { panel.OnEnter(param1, param2, param3); } return(panel); }
public UIPanelSheet GetUIPanelSheet(UIPanelTypeEnum key) { if (mUIPanelSheetDict == null) { InitUIPanelSheet(); } return(mUIPanelSheetDict[key]); }
/// <summary> /// 发送消息给窗口 /// </summary> /// <param name="name">窗口名</param> /// <param name="msgID">消息ID</param> /// <param name="paralist">参数数组</param> /// <returns></returns> public bool SendMessageToWindow(UIPanelTypeEnum panelType, UIMsgID msgID = 0, params object[] paralist) { BaseUI panel = mPanelDict.TryGet(panelType); if (panel != null) { return(panel.OnMessage(msgID, paralist)); } return(false); }
/// <summary> /// 根据面板类型 得到实例化的面板 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="panelType"></param> /// <param name="resource">如果是资源本地加载 本地路径文件Resource/Prefab/UI/名字</param> /// <returns></returns> private BaseUI GetPanel <T>(UIPanelTypeEnum panelType, bool resource = false) where T : BaseUI, new () { BaseUI baseUI; if (resource) { baseUI = System.Activator.CreateInstance(typeof(T)) as BaseUI; } else { string typeName = System.Enum.GetName(typeof(UIPanelTypeEnum), panelType); string hotName = "Hotfix." + typeName + "Logic"; baseUI = ILRuntimeManager.Instance.AppDomainCtrl.Instantiate <BaseUI>(hotName); baseUI.HotFixClassName = hotName; } string path = SheetManager.Instance.GetUIPanelSheet(panelType).Path; GameObject go; if (resource) { go = GameObject.Instantiate(Resources.Load <GameObject>("Prefabs/UI/" + panelType.ToString())) as GameObject; } else { go = ObjectManager.Instance.InstantiateObject(path, false, false); } if (go == null) { Debug.Log("创建窗口Prefab失败:" + panelType.ToString()); return(null); } go.transform.SetParent(WindRoot, false); baseUI.Init(go, panelType); mPanelDict.Add(panelType, baseUI); return(baseUI); }
/// <summary> /// 按指定层级添加UI /// 直接添加的View不进入Stack管理 /// </summary> public void Add <T>(UIPanelTypeEnum panelType, int siblingIndex) where T : BaseUI, new() { var view = GetPanel <T>(panelType); view.SetSiblingIndex(siblingIndex); }
/// <summary> /// 替换当前Panel /// </summary> public void Replace <T>(UIPanelTypeEnum panelType) where T : BaseUI, new () { PopPanel(true); PushPanel <T>(panelType); }
/// <summary> /// 强制打开指定界面,删除栈内所有UI /// </summary> /// <param name="name"></param> /// <param name="bTop"></param> /// <param name="paralist"></param> public void SwitchStateByName <T>(UIPanelTypeEnum panelType) where T : BaseUI, new() { CloseAllPanel(); PushPanel <T>(panelType); }
/// <summary> /// 初始化 /// </summary> public void Init(GameObject gameobject, UIPanelTypeEnum panelType) { UIObj = gameobject; RectTrans = UIObj.GetComponent <RectTransform>(); PanelType = panelType; }