NGUI 滑動翻頁效果

using UnityEngine;
using System.Collections;
   
public class PageView : MonoBehaviour
{
    const int ITEM_NUM = 2;        //總頁數
    const int PAGE_WIDTH = 2048;    //頁寬
    const float DRAG_SPEED = 0.5f;    //翻頁時間
    const int DRAG_OFFECT = 30;    //滑動的起點和終點的差需大於這個數才能觸發翻頁效果
        
    float beganX = 0;    
    float beganY = 0;            //鼠標按下的座標


    int curIndex = 1;            //當前頁數,默認爲第一頁

    bool isPlay = false;        //是否正在翻頁
    bool isPress = false;        //鼠標是否按下
    bool isPageFoot = false;    //當前是否處於頁尾
    bool isHomePage = true;        //當前是否處於首頁

    string left = "left";        //左滑動畫的name
    string right = "right";        //右滑動畫的name
    
    GameObject[] Item_Objects;

   // Use this for initialization
   void Start ()
   {
        this.Init ();
   }

    void Init()
    {
        Item_Objects = new GameObject[ITEM_NUM];

        for(int i = 1; i <= ITEM_NUM; ++i)
        {
            Transform trans = this.transform.FindChild("item" + i);

            if(trans)
            {
                GameObject spr = trans.transform.FindChild("Background").gameObject;
                spr.AddComponent<UIEventListener>();
                UIEventListener.Get(spr.gameObject).onPress = OnPressEvent;
            }
            Item_Objects[i - 1] = trans.gameObject;
        }
    }

    //鼠標按下事件監聽
    void OnPressEvent(GameObject obj,bool isDown)
    {
        float endX;
        float endY;
        if (isDown) 
        {
            beganX = UICamera.lastTouchPosition.x;
            beganY = UICamera.lastTouchPosition.y;

            isPress = true;
        } else 
        {
            endX = UICamera.lastTouchPosition.x;
            endY = UICamera.lastTouchPosition.y;

            if (isPress) 
            {
                if(isPlay == false)
                {
                    if(endX - beganX > DRAG_OFFECT)
                    {
                        if(isHomePage == false)
                        {
                            RightDrag();
                        }
                    }else if(endX - beganX < DRAG_OFFECT){
                        if(isPageFoot == false)
                        {
                            LeftDrag();
                        }
                    }
                }
            }
            isPress = false;
        }
    }

    //向左滑
    void LeftDrag()
    {
        isPlay = true;

        float x = this.transform.localPosition.x - PAGE_WIDTH;

        TweenPosition leftTween = TweenPosition.Begin (this.gameObject,DRAG_SPEED,new Vector3(x,0,0));
        leftTween.method = UITweener.Method.EaseInOut;
        leftTween.callWhenFinished = "callback";
        leftTween.name = left;
        leftTween.Reset ();

    }

    //向右滑
    void RightDrag()
    {
        isPlay = true;

        float x = this.transform.localPosition.x + PAGE_WIDTH;

        TweenPosition rightTween = TweenPosition.Begin (this.gameObject,DRAG_SPEED,new Vector3(x,0,0));
        rightTween.method = UITweener.Method.EaseInOut;
        rightTween.callWhenFinished = "callback";
        rightTween.name = right;
        rightTween.Reset ();

    }

    //動畫結束的回調函數
    void callback(UITweener tween)
    {
        isPlay = false;

        if (tween.name == left) 
        {
            curIndex ++;
        } else if (tween.name == right) 
        {
            curIndex --;
        }
        if (curIndex == 1) 
        {
            isHomePage = true;
        }else
        {
            isHomePage = false;
        }
        if(curIndex == ITEM_NUM){
            isPageFoot = true;
        }else
        {
            isPageFoot = false;
        }

    }
    
}
相關文章
相關標籤/搜索