美文网首页
项目问题集(三)—— UIScrollView 的顶端对齐

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

作者: d546d748d718 | 来源:发表于2017-11-11 13:26 被阅读0次

    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<items.Length; i++)
        {
            items[i].GetComponentInChildren<UILabel>().text = (i+1).ToString();
        }
        sView.ResetPosition();
        height = sView.GetComponentInChildren<UIGrid>().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<UILabel>().color == Color.red)
            {
                items[lastIndex].GetComponentInChildren<UILabel>().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<UILabel>().color = Color.red;
            lastIndex = index - 1;
    
        }
        
    }
    

    }

    相关文章

      网友评论

          本文标题:项目问题集(三)—— UIScrollView 的顶端对齐

          本文链接:https://www.haomeiwen.com/subject/erocmxtx.html