/// <summary> /// 显示一个View面板 /// </summary> /// <param name="viewName">View名称, 也是Resources下View预制体资源相对路径</param> /// <param name="layer">显示在哪一层</param> public void Show(string viewName, E_ViewLayer layer = E_ViewLayer.Middle) { if (viewName == null) { throw new System.ArgumentNullException(); } if (viewDic.ContainsKey(viewName)) { BaseView view = viewDic[viewName]; ShowView(view, layer); } else { CreateAsync(viewName); } }
private void ShowView(BaseView view, E_ViewLayer layer) { RectTransform layerRect = GetLayerTransform(layer); view.transform.SetParent(layerRect); RectTransform rect = view.transform as RectTransform; rect.pivot = Vector2.one / 2f; rect.localPosition = Vector3.zero; rect.localRotation = Quaternion.identity; rect.localScale = Vector3.one; rect.offsetMin = Vector2.zero; rect.offsetMax = Vector2.zero; view.gameObject.SetActive(true); view.OnShow(); }
private RectTransform GetLayerTransform(E_ViewLayer layer) { switch (layer) { case E_ViewLayer.Bottom: return(bottom); case E_ViewLayer.Middle: return(middle); case E_ViewLayer.Top: return(top); case E_ViewLayer.System: return(system); } return(middle); }
public void CreateAsync(string viewName, bool isShow = true, E_ViewLayer layer = E_ViewLayer.Middle) { if (loadingSet.Contains(viewName)) { Debug.LogWarning($"Try to show view {viewName} whitch is loading!"); return; } loadingSet.Add(viewName); ResMgr.Instance.LoadAsync <GameObject>(viewName, (viewObj) => { loadingSet.Remove(viewName); if (viewObj == null) { Debug.LogWarning($"Load view {viewName} failed!"); return; } BaseView view = viewObj.GetComponent <BaseView>(); if (view == null) { Debug.LogWarning($"View {viewName} do not have BaseView component!"); return; } view.Name = viewName; viewDic[viewName] = view; // view销毁时从字典中移除 (重要) view.destroyEvent += () => { if (viewDic.ContainsKey(viewName)) { viewDic.Remove(viewName); } }; if (isShow) { ShowView(view, layer); } }); }
/// <summary> /// 显示一个View, 不存在时自动异步加载显示 /// </summary> /// <param name="viewName">View名称, Resources下的View路径</param> /// <param name="layer">显示层级</param> public void ShowView(string viewName, E_ViewLayer layer = E_ViewLayer.Middle) { ViewMgr.Instance.Show(viewName, layer); }