ScrollView优化,处理Grid中子节点过多的情况

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class OptimizeScrollView
{
    static List<int> ids = new List<int>();
    static int _startIndex;
    static int _endIndex;
    /*  优化ScrollView以外的item对象,隐藏之 更新list
     *
     *  
     *  constraint  是否是强制更新
     */
    public static void UpdateChange(UIScrollView uiscrollView, float startY, bool constraint = false)
    {
        UIGrid grid = uiscrollView.transform.FindChild("Grid").GetComponent<UIGrid>();
        float panelHeight = uiscrollView.GetComponent<UIPanel>().GetViewSize().y;
        Vector3 vec3 = uiscrollView.transform.localPosition;
        float sub = vec3.y - startY;

        ids.Clear();
        
        for (int i = 0; i < grid.transform.childCount; i++)
        {
            GameObject obj = grid.transform.GetChild(i).gameObject;
            Vector3 pos = obj.transform.localPosition;
            float start = Mathf.Abs(pos.y);
            float end = start + grid.cellHeight;
            if (start >= sub && end <= sub + panelHeight)
            {
                ids.Add(i);
            }
        }

        if (ids.Count > 0)
        {
            int id = ids[0];
            int startIndex = id;
            if (id > 0)
            {
                startIndex = id - 1;
            }

            id = ids[ids.Count - 1];
            int endIndex = id;
            if (id + 1 < grid.transform.childCount)
            {
                endIndex = id + 1;
            }
            if (constraint == false)
            {
                if (_startIndex == startIndex && _endIndex == endIndex)
                {
                    return;
                }
            }

            _startIndex = startIndex;
            _endIndex = endIndex;
            
            for (int i = 0; i < grid.transform.childCount; i++)
            {
                GameObject go = grid.transform.GetChild(i).gameObject;
                if (i == 0 || i == grid.transform.childCount - 1)
                {
                    if (!go.activeSelf)
                    {
                        go.SetActive(true);
                    }
                }
                else
                {
                    if (i >= startIndex && i <= endIndex)
                    {
                        if (!go.activeSelf)
                        {
                            go.SetActive(true);
                        }
                    }
                    else
                    {
                        if (go.activeSelf)
                        {
                            go.SetActive(false);
                        }
                    }
                }
            }
        }
    }
}

 

posted @ 2015-09-17 19:36  泥潭里的金鱼  阅读(293)  评论(0编辑  收藏  举报