UIScrollView复用节点示例

来源:互联网 发布:文化部对网络直播 编辑:程序博客网 时间:2024/05/31 15:18

重要脚本:UIPanel,UIScrollView,UIDragScrollView,UIWrapContent

记得item挂UIDragScrollView和BoxCollider哦

如下图,先把物体和脚本弄好


ReuseScroll就是自己写的复用脚本了

代码如下:

using UnityEngine;using System.Collections;using System.Collections.Generic;public class ReuseScroll : MonoBehaviour{    /// <summary>    /// 数据类    /// </summary>    public class MyData    {        public MyData(string name)        {            this.name = "name_" + name;        }        public string name;    }    public UIWrapContent wrapContent;    private Dictionary<int, GameObject> m_index2Item = new Dictionary<int, GameObject>();    /// <summary>    /// 数据列表    /// </summary>    private List<MyData> m_data = new List<MyData>();    protected void Start()    {        InitData();        //启动wrapContent//        wrapContent.enabled = true;        //实现复用的托管方法//        wrapContent.onInitializeItem = (go, wrapIndex, realIndex) =>        {            realIndex = -realIndex;            if (!m_index2Item.ContainsKey(realIndex))            {                m_index2Item.Add(realIndex, go);            }            var actv = realIndex >= 0 && m_data.Count > realIndex;            go.SetActive(actv);            if (actv)                go.GetComponentInChildren<UILabel>().text = m_data[realIndex].name;        };    }    protected void Update()    {        //按A键添加数据并更新列表//        if (Input.GetKeyDown(KeyCode.A))        {            var index = m_data.Count;            AddData(new MyData(index.ToString()));            if (m_index2Item.ContainsKey(index))            {                var go = m_index2Item[index];                if (go.transform.localPosition.y <= 0)                {                    go.SetActive(true);                    go.GetComponentInChildren<UILabel>().text = m_data[index].name;                }            }        }    }    /// <summary>    /// 初始化数据    /// </summary>    private void InitData()    {        for (int i = 0; i < 4; ++i)        {            m_data.Add(new MyData(i.ToString()));        }    }    /// <summary>    /// 添加数据    /// </summary>    private void AddData(MyData data)    {        m_data.Add(data);    }}


效果如下,只需要几个item,复用可以显示无限个item,按A键即可插入新的数据并更新列表


希望大家有更好的办法的话,可以分享交流

0 0
原创粉丝点击