private static void LoadView(int id, Action <UIBaseView> callback, bool pushStack, params object[] args)
    {
        var canvas = canvasGo;

        if (id == preLoadId || id == 0)
        {
            return;
        }

        if (id == -1)
        {
            ShowMainViews(callback);
            return;
        }

        UIViewDeploy viewDeploy = Deploy.GetDeploy <UIViewDeploy>(1);

        if (viewDeploy)
        {
            ViewNode preViewNode = viewNodeStack.Count > 0 ? viewNodeStack.Peek() : null;
            ViewNode curViewNode = new ViewNode(null, viewDeploy, args);
            LoadRawView(viewDeploy, uiBaseView =>
            {
                if (viewDeploy.uiViewLayer == UIViewLayer.View)
                {
                    HidePreViews();
                }
                else
                {
                    viewNodeStack.Peek().ShowEffects(false);
                }

                uiBaseView.args    = args;
                curViewNode.uiView = uiBaseView;
                curViewNode.SetAsLastSibling(true);

                if (pushStack)
                {
                    viewNodeStack.Push(curViewNode);
                }

                if (curViewNode.CheckInViewLayer(UIViewLayer.View))
                {
                    ShowWidgetInToolbarLayer(curViewNode);
                }
                else
                {
                    ShowWidgetInToolbarLayer(preViewNode);
                }

                if (callback != null)
                {
                    callback(uiBaseView);
                }

                preLoadId = 0;
            });
        }
        else
        {
            Debug.LogErrorFormat("UIViewDeploy[id={0}] not found!", id);
        }
    }