NGUI 无限滑动,支持定位显示指定数据

为什么需要无限滑动
1:背包,玩家如果获取了1000个道具,如果没有无限滑动的话就只能做成按页来显示或者生成1000个格子来显示
2:排行榜,和背包同理
无限滑动应用场景在与需要显示非常多的item的时候
百度了很多ngui的无限滑动都不支持定位显示数据,这个需求一般用在新手引导或者需要直接跳到某条数据显示在当前界面显示的场景

无限滑动思路
这里写图片描述
计算出四个边角的局部坐标 再根据是左右滑动还是上下滑动来确定边角离中心的距离,当滑动的时候,item离中心点的距离大于的边角离中心点的距离,item就设置坐标在反方向,例子:如果是向左滑动,当item离中心点的距离大于边角离中心点的距离,该item就设置坐标在最右边。
下面放代码:
定义变量

 /// <summary>
    /// item , item下标 , 数据下标 (都是从0开始)
    /// </summary>
    public Action<Transform,int,int> renderItem; //渲染item
    public Action renderAllItemCallBack; // 渲染完所有item的回调

    public UIGrid grid;// 排序组件
    public GameObject itemPrefab; //item预制体
    public UIScrollView scrollView; //滑动组件

    private int dataCount; //数据个数
    private List<Transform> childers; //item列表
    private UIPanel panel; //滑动的panel组件

    private float width { get { return grid.cellWidth; } } // item宽度
    private float height { get { return grid.cellHeight; } } //item高度

    //If the arrangement is horizontal, this denotes the number of columns.
    // If the arrangement is vertical, this stands for the number of rows.
    private int maxPerLine { get { return grid.maxPerLine; } }
    private int rows = 1; //行数 (预制体所占的总行数)
    private int columns = 1; //列数 (预制体所占的总列数)
    private float extents = 0; //所有预制体所占长度或者是高度的一半 用在循环的时候计算item的坐标
    private int itemCount = 10; //预制体item的数量

初始化数据:

 /// <summary>
    /// 初始化数据
    /// </summary>
    public void initData ()
    {
        int itemCount = childers.Count;
        if (scrollView.movement == UIScrollView.Movement.Horizontal)
        {
            rows = maxPerLine; //行数
            columns = itemCount / maxPerLine;
            extents = columns * width * 0.5f;
        }
        else
        {
            columns = maxPerLine; //列数
            rows = itemCount / maxPerLine;
            extents
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值