木骰

用栈来管理UI界面:IView

界面的基类IView,主要是为了给ViewManager开放一些接口,顺便放一些公共方法。还有ViewType的枚举也放在这,为的是方便属性面板上直接编辑。
使用或操作的组合枚举,标记界面类型。除了跟ViewManager相关的枚举值,还可以放一些界面显示相关的枚举,如一般游戏顶部可能会有个Title条,包含了钻石金币,头像等,那么可以开个枚举出来,标记这些部分是否要显示出来。


public enum ViewType
{
    /// 
    /// 悬浮界面
    /// 
    levitate = 1 << 0,
    /// 
    /// 不作为返回界面
    /// 
    cantBack = 1 << 1,
    /// 
    /// 显示Title
    /// 
    hideTitle = 1 << 2,
    /// 
    /// 显示金币和钻石
    /// 
    withFortune = 1 << 3,
    /// 
    /// 显示头像
    /// 
    withHead = 1 << 4,
    /// 
    /// 显示返回按钮
    /// 
    withBackBtn = 1 << 5 ,
    fortune_head = withFortune | withHead ,
    fortune_back=withFortune | withBackBtn,
};

Enter和Exit方法是开放给ViewManager用的两个接口,表示界面的呼起和退出。而界面真正被显示或隐藏的操作则又是在Show和Out里做的。一些界面调起和退出的动画可放到Show和Out里去。


public virtual void Enter()
{
//     if(!Title.gameObject.activeSelf)
//         Title.SetActive(true);
    Invoke("DealWithCommonPartScreen", 0.02f);
}
public virtual void Exit()
{
}
public virtual void Show()
{
    if (!isAwake)
        Awake();
    SetActive(true);
    Invoke("ShowAnim", 0.01f);
}
public virtual void Out()
{
    OutAnim();
}

还有一个BackView方法。ViewManager在Update里监听了返回键操作,调的就是栈顶的BackView函数,子类可以通过重写这个BackView决定是否可以通过返回键回退界面。


public virtual void BackView()
{
    ViewManager.BackView();
}

一个DealWithCommonPartScreen方法用来处理上面提过的界面类型中对于类似Title等公共部分的处理。


protected virtual void DealWithCommonPartScreen()
{
}

还有记得在OnDestroy方法里调一下Exit,当界面被销毁的时候应该执行一下退出操作。因为像是注册别的类里的某个委托,界面被销毁了而委托没注销的话可能就会出错了。


protected virtual void OnDestroy()
{//界面被销毁的时候退出界面 为了解除一些广播的绑定
    Exit();
}

主要就是这些,其他的可以看情况往里加,像是抽一些公共方法出来什么的。


public enum ViewType
{
    /// 
    /// 悬浮
    /// 
    levitate = 1 << 0,
    /// 
    /// 不作为返回界面
    /// 
    cantBack = 1 << 1,
    /// 
    /// 显示Title
    /// 
    hideTitle = 1 << 2,
    /// 
    /// 显示金币和钻石
    /// 
    withFortune = 1 << 3,
    /// 
    /// 显示头像
    /// 
    withHead = 1 << 4,
    /// 
    /// 显示返回按钮
    /// 
    withBackBtn = 1 << 5 ,
    fortune_head = withFortune | withHead ,
    fortune_back=withFortune | withBackBtn,
};
public class IView : MonoBehaviour {
 //   protected static TitleHandler Title { get { return TitleHandler.Instance; } }
    public ViewType viewType = ViewType.levitate;
    //protected UITweener tween;
    protected bool isAwake = false;
    #region Unity生命周期
    protected virtual void Awake()
    {
        if (isAwake) return;
        isAwake = true;
       
   //     Transform content=transform.Find("content");
  //      if (content != null)
   //         tween = content.GetComponent();
    }
    protected virtual void Start () {
       }
    protected virtual void Update () {
          
       }
    protected virtual void OnEnable()
    {
    }
    protected virtual void OnDisable()
    {
    }
    protected virtual void OnDestroy()
    {//界面被销毁的时候退出界面 为了解除一些广播的绑定
        Exit();
    }
    #endregion
    #region Show/out
    public virtual void Enter()
    {
   //     if(!Title.gameObject.activeSelf)
   //         Title.SetActive(true);
        Invoke("DealWithCommonPartScreen", 0.02f);
       
    }
    public virtual void Exit()
    {
    }
    public virtual void Show()
    {
        if (!isAwake)
            Awake();
        SetActive(true);
        Invoke("ShowAnim", 0.01f);
    }
    public virtual void Out()
    {
        OutAnim();
    }
    #endregion
    public virtual void BackView()
    {
        ViewManager.BackView();
    }
    public virtual void SetViewType(ViewType type)
    {
        viewType = type;
    }
    public virtual void SetActive(bool active)
    {
        gameObject.SetActive(active);
    }
    protected virtual void DealWithCommonPartScreen()
    {
        //若是悬浮窗口,则界面公共部分保持不变
        if ((viewType & ViewType.levitate)>0)
            return;
        //注意,大于withTitle的都将显示Title,具体显示内容再以具体内容为主
        if((viewType&ViewType.hideTitle)>0)
        {
   //         Title.Out();
        }else
        {
    //        Title.Show();
        }
        if((viewType&ViewType.withFortune)>0)
        {
   //         Title.showFortune();
        }else
        {
  //          Title.hideFortune();
        }
        if((viewType&ViewType.withHead)>0)
        {
   //         Title.showHead();
        }else
        {
   //         Title.hideHead();
        }
        if((viewType&ViewType.withBackBtn)>0)
        {
   //         Title.showBackBtn();
        }else
        {
   //         Title.hideBackBtn();
        }
    }
    #region 动画
    protected virtual void ShowAnim()
    {
        //if (tween != null)
        //{
        //    tween.onFinished.Clear();
        //    tween.PlayForward();
        //  //  tween.ResetToBeginning();
        //}
    }
    protected virtual void OutAnim()
    {
   //     if (tween != null)
   //     {
                     ////临时
                     //SetActive(false);
                     ///*
   //         if (!gameObject.activeSelf)
   //             gameObject.SetActive(true);
   //         tween.onFinished.Clear();
   //         tween.onFinished.Add(new EventDelegate(delegate
   //         {
   //             SetActive(false);
   //         }));
   //         tween.PlayReverse();*/
   //         tween.ResetToBeginning();
   //     }else
   //     {
   //         SetActive(false);
   //     }
    }
    #endregion
}
— 于 共写了231个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*