1.首先看一下NGUI自己封装的的SpringPanel,代码如下:
[RequireComponent(typeof(UIPanel))]
[AddComponentMenu("NGUI/Internal/Spring Panel")]public class SpringPanel : MonoBehaviour{ public Vector3 target = Vector3.zero; public float strength = 10f;public delegate void OnFinished ();
public OnFinished onFinished;UIPanel mPanel;
Transform mTrans; float mThreshold = 0f; UIScrollView mDrag;/// <summary>
/// Cache the transform. /// </summary>void Start ()
{ mPanel = GetComponent<UIPanel>(); mDrag = GetComponent<UIScrollView>(); mTrans = transform; }/// <summary>
/// Advance toward the target position. /// </summary>void Update ()
{ AdvanceTowardsPosition(); }/// <summary>
/// Advance toward the target position. /// </summary> protected virtual void AdvanceTowardsPosition() { float delta = RealTime.deltaTime;if (mThreshold == 0f)
{ mThreshold = (target - mTrans.localPosition).magnitude * 0.005f; mThreshold = Mathf.Max(mThreshold, 0.00001f); }bool trigger = false;
Vector3 before = mTrans.localPosition; Vector3 after = NGUIMath.SpringLerp(mTrans.localPosition, target, strength, delta);if (mThreshold >= Vector3.Magnitude(after - target))
{ after = target; enabled = false; trigger = true; } mTrans.localPosition = after;Vector3 offset = after - before;
Vector2 cr = mPanel.clipOffset; cr.x -= offset.x; cr.y -= offset.y; mPanel.clipOffset = cr;if (mDrag != null) mDrag.UpdateScrollbars(false);
if (trigger && onFinished != null) onFinished(); }/// <summary>
/// Start the tweening process. /// </summary>static public SpringPanel Begin (GameObject go, Vector3 pos, float strength)
{ SpringPanel sp = go.GetComponent<SpringPanel>(); if (sp == null) sp = go.AddComponent<SpringPanel>(); sp.target = pos; sp.strength = strength; sp.onFinished = null; sp.mThreshold = 0f; sp.enabled = true; return sp; }}2.接着我们直接就可以用如下代码来实现翻页效果,前提是你要知道每一页滚动之后的scroll位置值,此时每一个item不用添加box,以及drag scroll view,都不用添加,因为我们是为了实现点击翻页,而不是拖拽
SpringPanel.Begin(m_ScrollView.gameObject, m_ScrollViewTrans[1], 8f);第一个参数为你挂在scrollview的物体,第二个参数为你要移动到的目标位置,第三个参数为移动的速度,