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

  • Post author:
  • Post category:其他



为什么需要无限滑动



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; //列数
      



版权声明:本文为juedno原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。