Unity之NGUI拖拽刷新翻页

      我的一篇《Unity之NGUI常见问题汇总》中,有讲到使用UIScroll view实现拖拽功能,但最近又发现一个新的实现效果,比UIScroll view方便快捷,在此与大家分享一下。


一、 因为之前篇幅的原因没有详细讲解UIScroll View的实现方法,所以先来看看具体的实现步骤。

    public UIScrollview m_zRefresh;
    void OnEnable()
    {
        //先注册一个UIScrollview的onDragFinished事件
        m_zRefresh.onDragFinished += ChangeDirection;
    }   
    void Update
    {
        //主要是在拖拽时进行判断。
        JudgePageTurn()
    }
     /// 
    /// 判断是否可以翻页
    /// 
    void JudgePageTurn()
    {
        //调用Scroll view中的isDragging,在松开鼠标时判断是否满足翻页条件。
        if (m_zRefresh.isDragging)
        {
                        
            float _scrollValue = m_zDailyRefresh.horizontalScrollBar.value;

            //m_zDragUpTurn和m_zDragDownTurn是定义向拉到多少距离。_scrollValue是ScrollBar的value值。
            bool _upTurn = m_zDailyRefresh.transform.localPosition.y >= m_zDragUpTurn && _scrollValue <= 0.05;
            bool _downTurn = m_zDailyRefresh.transform.localPosition.y <= m_zDragDownTurn && _scrollValue >= 0.98;
            if (_upTurn || _downTurn)
            {
                m_zIsTurnPack = true;
            }
            else
            {
                m_zIsTurnPack = false;
            }
        }
    }
    /// 
    /// 当完成拖拽后的操作
    /// 
    public void ChangeDirection ()
    {
        
        if (m_zIsTurnPack)
        {
            if (m_zDailyRefresh.horizontalScrollBar.value <= 0.05)
                offsetIndex = offsetIndex - m_zMaxIndex < 0 ? 0 : offsetIndex - m_zMaxIndex;
            else if (m_zDailyRefresh.horizontalScrollBar.value >= 0.98)
                offsetIndex = offsetIndex + m_zMaxIndex > activityInfoList.Count - 1 ? offsetIndex : offsetIndex + m_zMaxIndex;

             InitShowPanel();
        }
    } 

    void OnDisable()
    {
        m_zRefresh.onDragFinished -= ChangeDirection;
    }

二、重点来了!!使用NGUI的UIEventListener中的OnDragEnd(我使用的是NGUI3.9.0版本)。

    之前一直在使用UIEventListener中的OnClick和OnHover。也进到UIEventListener中看过,但没太在意其他事件。最近又进去仔细的看了一遍,这次让我注意到了OnDragEnd。突发奇想,想用它来实现拖拽刷新翻页效果,看看能不能优化。具体代码如下:

void OnEnable()  
{  
    //m_zDragItem是要拖拽的物体  
    UIEventListener.Get(m_zDragItem).OnDragEnd = ChangeDirection;  
}  
///   
/// 当完成拖拽后的操作  
///   
public void ChangeDirection (GameObject go)  
{  
        if (m_zDailyRefresh.horizontalScrollBar.value <= 0.05 && m_zDailyRefresh.transform.localPosition.y >= m_zDragUpTurn)  
        {  
              offsetIndex = offsetIndex - m_zMaxIndex < 0 ? 0 : offsetIndex - m_zMaxIndex; 
              InitShowPanel();  
        }  
        else if (m_zDailyRefresh.horizontalScrollBar.value >= 0.98 && m_zDailyRefresh.transform.localPosition.y <= m_zDragDownTurn)  
        {  
              offsetIndex = offsetIndex + m_zMaxIndex > activityInfoList.Count - 1 ? offsetIndex : offsetIndex + m_zMaxIndex;  
              InitShowPanel();  
         }  
}  



三、有时换个思路会收到意想不到的结果。

    不用多说啥了吧,通过两个代码明显能看到差别巨大。

你可能感兴趣的:(-=Unity=-)