Unity之NGUI拖拽刷新翻页

来源:互联网 发布:网络错误678怎么解决 编辑:程序博客网 时间:2024/05/21 09:59

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


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

    public UIScrollview m_zRefresh;    void OnEnable()    {        //先注册一个UIScrollview的onDragFinished事件        m_zRefresh.onDragFinished += ChangeDirection;    }       void Update    {        //主要是在拖拽时进行判断。        JudgePageTurn()    }     /// <summary>    /// 判断是否可以翻页    /// </summary>    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;            }        }    }    /// <summary>    /// 当完成拖拽后的操作    /// </summary>    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;  }  /// <summary>  /// 当完成拖拽后的操作  /// </summary>  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();           }  }  



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

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

1 0