/// <summary> /// 更新导航信息 /// </summary> /// <param name="panelBase"></param> private void UpdateNavigationInfo(PanelID pid, bool ignoreCache) { LocalPanelInfo localPanelInfo = null; if (TryGetLocalPanelInfo(pid, out localPanelInfo)) { if (localPanelInfo.IsStartPanel) { ClearCacheStack(); } if ((localPanelInfo.HidePanelMask == 0 && localPanelInfo.CacheLv == PanelCacheLv.None)) { return; } HideCondition condition = (info) => { if (info != null && (localPanelInfo.IsMatchHideType(info.PType) || localPanelInfo.CanCachePanel(info.PID))) { return(true); } return(false); }; List <UIPanelBase.PanelData> cachePanels = new List <UIPanelBase.PanelData>(); if (showPanels.Count > 0 && condition != null) { List <PanelID> lstHide = new List <PanelID>(); UIPanelBase.PanelData panelBackspaceData = null; UIPanelBase.PanelReturnData lastReturnData = (null != panelCacheStack && panelCacheStack.Count != 0) ? panelCacheStack.Peek() : null; bool canCache = (null == lastReturnData || lastReturnData.PID != pid); PanelID tempPID = PanelID.None; UIPanelBase tempPBase = null; LocalPanelInfo tempInfo = null; for (int i = 0, max = showPanels.Count; i < max; i++) { tempPID = (PanelID)showPanels[i]; tempPBase = GetPanel(tempPID); if (null == tempPBase) { continue; } if (TryGetLocalPanelInfo(tempPID, out tempInfo) && condition(tempInfo)) { lstHide.Add(tempPID); if (!ignoreCache && canCache && localPanelInfo.CanCachePanel(tempPID)) { panelBackspaceData = tempPBase.GetPanelData(); if (null == panelBackspaceData.JumpData) { panelBackspaceData.JumpData = new UIPanelBase.PanelJumpData(); } panelBackspaceData.JumpData.IsBackspacing = true; cachePanels.Add(panelBackspaceData); } } } if (cachePanels.Count > 0) { cachePanels.Sort((left, right) => { UIPanelBase pleft = GetPanel(left.PID); UIPanelBase pright = GetPanel(right.PID); return(pleft.Depth - pright.Depth); }); panelCacheStack.Push(new UIPanelBase.PanelReturnData() { PID = pid, CachePanelList = cachePanels, }); } for (int i = 0; i < lstHide.Count; i++) { HidePanel(lstHide[i], false); } } } }