Unity Scroll View优化

之前写过相关组件:https://blog.csdn.net/qq_34987964/article/details/100937002

这次遇到项目需求, 重写并优化了代码

结构上面基本没有变化 , 包含一个使用示例:

 

 

代码部分:

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/**
 * 视窗ScrollRect垂直自动排序(Item固定长高/节点复用/无限滚动)
 * ContentParent上面不能有Layout和SizeFitter组件,其他窗口默认ScroView即可
 * Item需要设置minAnchors(0.5,1),maxAnchors(0.5,1)<以父节点的上边中点为锚点>
 */
public class ScrollViewVerticalSort<T> : MonoBehaviour
{
    //创建节点初始化委托
    //参数:实例化节点
    //返回值:对此节点设置属性的Action委托
    public Func<Transform, Action<T>> CreateEvent;

    //Viewport节点(可视范围节点)
    public RectTransform m_Viewport;
    //Item父节点/预制体节点
    public RectTransform m_ContentParent;
    public RectTransform m_ContentItem;

    //Item高宽
    private float itemHeight;
    private float itemWidth;
    //Itam行列间隔
    private float spacingWidth;
    private float spacingHeight;
    /// <summary>列数量(x轴上排列几个)</summary>
    private int colCount;
    /// <summary>行数量(y轴上排列几个)</summary>
    private int rowCount;
    //数据容器
    //private List<object> __dataList = new List<object>();
    private List<T> __dataList = new List<T>();

    //开始数据下标
    private int __startIndex = 0;
    //节点池列表
    private List<ItemControll> __releaseList = new List<ItemControll>();
    private List<ItemControll> __activeList = new List<ItemControll>();

    //添加数据
    public void Add( T data)
    {
        __dataList.Add(data);
        //刷新视图
        RefreshContentSize();
        RefreshContent();
    }
    public void AddRange(T[] datas)
    {
        __dataList.AddRange(datas);
        //刷新视图
        RefreshContentSize();
        RefreshContent();
    }
    //移除数据
    public void Remove(params T[] datas)
    {
        foreach (var data in datas)
        {
            __dataList.Remove(data);
        }
        //刷新视图
        RefreshContentSize();
        RefreshContent();
    }
    //清空数据
    public void Clear()
    {
        __dataList.Clear();
        //刷新视图
        RefreshContentSize();
        RefreshContent();
    }
    //设置间隔
    public void SetSpacingWidth(float width)
    {
        if (spacingWidth != width)
        {
            spacingWidth = width;
            //刷新视图
            RefreshContentSize();
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值