项目问题集(三)—— UIScrollView 的顶端对齐

NGUI——SpringPanel
SpringPanel是NGUI自带的针对ScrollView的tween动画脚本,用于做一些ScrollView的动画,上午组长要求用这个做一个小功能,就是一键让某一行滑动到指定位置。

如图1:
1.png
和图2:
2.png
所示的样子。

不多说了,直接上代码:

public class SpringTest : MonoBehaviour {
// 所有item的数组
public GameObject[] items;
// scrollview对象
public GameObject scrollview;
// 要移动到的终点位置,比如让第10个按钮滑动到第1个按钮的位置
Vector3 targetPos;
// 要滑动的按钮的序号,从1开始
public int beginIndex;
// 滑动终点的位置,就是滑动的终点是第几个按钮的位置
public int targetIndex;

// Use this for initialization
void Start () {
    // 65是每一个按钮的高度
    targetPos = new Vector3(scrollview.transform.localPosition.x, scrollview.transform.localPosition.y + (beginIndex-1 - targetIndex+1) * 65, scrollview.transform.localPosition.z);
}

// Update is called once per frame
void Update () {
    if (Input.GetKeyDown(KeyCode.Space))
    {   
        // springPanel是一个脚本,可以不用添加在ScrollView上,代码内部默然添加的。
        // 参数一:滑动的对象;参数二:滑动终点;参数三:这里指滑动速度
        SpringPanel.Begin(scrollview, targetPos, 5);
    }
}

}
代码很简单

--------------------------------------------------做了些扩展


UI节点.png

UIInput.png

UI.png
脚本公共变量.png

public class UITest : MonoBehaviour {

// Use this for initialization
public GameObject[] items;
public UIScrollView sView;
public UIInput label;
// 输入的数字强转的序号
private int index;
// ScrollView初始位置
private Vector3 pos;
// ScrollView滑动强度
private float stren = 10;
// 上一次选中的序号
private int lastIndex;
// UIGrid元素高度
private float height;
// ScrollView剪切视图最多容纳的Button个数
private int maxCout = 5;
void Start () {
    for (int i = 0; i().text = (i+1).ToString();
    }
    sView.ResetPosition();
    height = sView.GetComponentInChildren().cellHeight;
    pos = sView.transform.localPosition;
}

// Update is called once per frame
void Update () {
    

    if (Input.GetKeyDown(KeyCode.Space))
    {
        string str = label.value;
        if (int.Parse(str) != null)
        {
            index = int.Parse(str);
        }

        if (index <= 1)
        {
            index = 1;
        }
        else if (index>=items.Length)
        {
            index = items.Length;
        }

        // 清除上一次选中Btn的变色效果
        if (items[lastIndex].GetComponentInChildren().color == Color.red)
        {
            items[lastIndex].GetComponentInChildren().color = Color.black;
            lastIndex = -1;
        }

        // 控制ScrollView自动滑动。前5个和最后5个,默认不滑动
        if (index <= maxCout )
        {
            SpringPanel.Begin(sView.gameObject, pos, stren);
        }
        else if(index > items.Length -maxCout)
        {
            SpringPanel.Begin(sView.gameObject, new Vector3(0, (pos.y + (items.Length - maxCout) * height), 0), stren);
        }
        else
        {
            SpringPanel.Begin(sView.gameObject, new Vector3(0, (pos.y + (index - 1) * height), 0), stren);
        }
        // 清空输入框内容
        label.value = null;
        // 选中Btn变色
        items[index - 1].GetComponentInChildren().color = Color.red;
        lastIndex = index - 1;

    }
    
}

}

你可能感兴趣的:(项目问题集(三)—— UIScrollView 的顶端对齐)