http://blog.csdn.net/u012091672/article/details/21159075
解决的问题
使用grid放置item的时候,每次数据可能都不一样,但是每次都删除grid下面的节点,之后动态创建新的item是比较浪费的。 写个简单的工具函数,原理很简单。 、先获得grid下面的可用item 、根据data的大小进行初始化 、每次在可用的item列表里面获取新的item,如果不够用了,就创建新的item 、disable掉没用的item 附:每个grid下面预先要有一个名字包含“Template_”的模板item。这个模板不会被用,之前尝试过把这个模板也当做一个item正常使用,但是有些NGUI的widget会出现BUG。 [csharp] view plaincopy
using UnityEngine;
using System.Collections.Generic;
//qq group :333417608
public class UITools
{ /* usage:
List<GameObject> canUseList = UITools.GetCanUseItemList(gridRoot);
for (int i=0; i<totalData.Length; ++i)
{
GameObject go = UITools.GetNewItemObj(canUseList, gridRoot, prefab);
// do init
}
UITools.UnActiveUnuseItem(canUseList); // prefab is the template
*/ static public GameObject GetNewItemObj (List<GameObject> canUseList, GameObject root, GameObject prefab)
{
GameObject go = null;
if (canUseList.Count > ) {
go = canUseList [];
canUseList.RemoveAt ();
} else {
go = NGUITools.AddChild (root, prefab);
}
NGUITools.SetActiveSelf (go, true);
return go;
} static public T GetNewItemObj<T> (List<T> canUseList, GameObject root, GameObject prefab) where T : Component
{
T item = null;
if (canUseList.Count > ) {
item = canUseList [];
canUseList.RemoveAt ();
} else {
item = NGUITools.AddChild (root, prefab).GetComponent<T>();
}
item.name = string.Format("{0:D3}", );
NGUITools.SetActiveSelf (item.gameObject, true);
return item;
} static public List<GameObject> GetCanUseItemList (GameObject root)
{
List<GameObject> itemList = new List<GameObject> ();
Transform rootT = root.transform;
for (int i=; i<rootT.childCount; ++i) {
GameObject go = rootT.GetChild (i).gameObject;
if (IsNotTemplateGameObject(go))
{
itemList.Add (go);
}
}
return itemList;
} static public List<T> GetCanUseItemList<T> (GameObject root) where T : Component
{
List<T> childrenList = new List<T> ();
Transform rootT = root.transform;
for (int i=; i<rootT.childCount; ++i) {
Transform child = rootT.GetChild (i);
T t = child.GetComponent<T> ();
if (t != null && IsNotTemplateGameObject(child.gameObject)) {
childrenList.Add (t);
}
}
return childrenList;
} static public void UnActiveUnuseItem (List<GameObject> canUseList)
{
foreach (var item in canUseList) {
NGUITools.SetActiveSelf (item, false);
}
} static public void UnActiveUnuseItem<T> (List<T> canUseList) where T : Component
{
foreach (var item in canUseList) {
NGUITools.SetActiveSelf (item.gameObject, false);
}
} static private bool IsNotTemplateGameObject(GameObject go)
{
bool result = !go.name.ToLower().Contains("template_");
if (!result && go.activeSelf)
{
NGUITools.SetActiveSelf(go, false);
}
return result;
}
}

【NGUI】grid下面的item的重复利用的更多相关文章

  1. C# 第三方控件 下面的Item不显示了

    当高版本的第三方版本 替换成低版本的第三方后,item,不显示了之后,请试着再次在这基础上添加一个Item,观察这个Item和原来已经在的却不显示的Item的区别在哪里.然后去源程序正常文件哪里 将这 ...

  2. 如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭

    如果你的NavigationDrawer里面的Item没有响应,Drawer不能左滑关闭,应该是因为你没有把主要内容放在DrawerLayout标签下的第一位. The main content vi ...

  3. eclipse 下面的folder,source folder,package的区别与作用

    首先明确一点,folder,source folder,package都是文件夹,既然是文件夹,那么任何的文件都可以往这三种文件夹下面的放.1.他们的区别folder就是普通的文件夹,它和我们wind ...

  4. 根据div 标签 查看数组@class=modulwrap 下面的/table/tbody/tr/td

    <div class="modulwrap"> <div class="request_title"> <span class=& ...

  5. jz2440: linux/arch/arm/下面的plat-和mach-

    jz2440: linux/arch/arm/下面的plat和mach plat-s3c24xxmach-s3c2440mach-s3c2410 ====================== 1. 三 ...

  6. syslog之三:建立Windows下面的syslog日志服务器

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

  7. webkit下面的CSS设置滚动条

    webkit下面的CSS设置滚动条 1.主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端 ...

  8. Lazarus下面的javascript绑定另外一个版本bug修正

    Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$EN ...

  9. 给虚拟机下面的ubuntu系统增加硬盘存储空间

    给虚拟机下面的ubuntu系统增加硬盘存储空间   由于ubuntu系统是安装在vsphere上面的,所以可能会和vmware上面的有一点区别,打开exsi系统的配置页面,如下图所示. 选择添加存储器 ...

随机推荐

  1. C#中的yield return与Unity中的Coroutine(协程)(下)

    Unity中的Coroutine(协程) 估计熟悉Unity的人看过或者用过StartCoroutine() 假设我们在场景中有一个UGUI组件, Image: 将以下代码绑定到Image using ...

  2. js事件代理

    需要注意的blog:http://blog.csdn.net/majian_1987/article/details/8591385 一篇博客看懂  http://blog.csdn.net/maji ...

  3. words in view Moqui resource code

    annotation:注释 注解 documentation:文件  证明文件 embed:嵌入 context:环境  上下文 explicity: 明确的 明白的 conversion: 转化

  4. 多个TableView的练习

    效果图: 左边图片的代码: // // SecViewController.m // UI__多个TableView练习 // // Created by dllo on 16/3/17. // Co ...

  5. ajax中的application/x-www-form-urlencoded中的使用

    ajax中的application/x-www-form-urlencoded中的使用一,HTTP上传的基本知识 在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定 ...

  6. abstract和接口

    接口只包含常量和抽象方法,不能实例化. abstract: 1.抽象类不能实例化, 2.可以没有抽象方法.但有了抽象方法,一定要被定义为抽象类. 3.子类没有实现父类中所有的抽象方法.子类也必须定义为 ...

  7. Java-Vector

    package 集合类.list类; import java.util.Vector; public class Vector类 { public static void main(String[] ...

  8. 【HDU 5438】Ponds

    题意 不断删去度数为1的点,最后求有奇数个点的联通块的权值之和. 分析 存边的时候,要头尾都存这个边.用dfs或者队列删点,再用并查集或者dfs确定联通块,然后统计联通块的点数,最后累加. 我自己写的 ...

  9. java连接mysql(二)

    模拟转账成功时的业务场景 import java.sql.*; public class TransactionDemo1 { public static void main(String[] arg ...

  10. POJ3628 Bookshelf 2(01背包+dfs)

    Bookshelf 2 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8745   Accepted: 3974 Descr ...