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. CSS3小分队——进击的border-radius

    上一篇:<CSS float属性小解——”浮“生若水> 写在前面: ~~强势插入~~如果有想进一步了解float属性的小伙伴,可以猛戳上面的链接,<CSS float属性小解——”浮 ...

  2. 如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管

    微软推出的Asp.net vNext(asp.net 5.0)的其中的一个目标就是统一mvc 和web api 的框架.接下来我就演示一下一下几个内容 1,怎么在Asp.net mvc 6 中创建简单 ...

  3. 每天一个linux命令(54):sftp命令

    sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP ...

  4. 每天一个linux命令(37):free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  5. PHP ADLogin

    <?php $user = 'aaaa'; $password = 'xxxx'; $domain = 'b.a.com'; //设定域名 $port = 3268; $basedn = 'dc ...

  6. poj1679 kruskal

    判断最小生成树是否唯一.kruskal时记录需要的边,然后枚举删除它们,每次删除时进行kruskal,如果值未变,表明不唯一. #include<stdio.h> #include< ...

  7. BZOJ4195 程序自动分析

    Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...

  8. C/C++ 中的指针

    指针(pointer)有两种涵义 一是指C/C++中的一种数据类型(data type). 二是指某个类型为指针的 数据/物件(object). 指针作为一种数据类型,属所谓复合类型(compound ...

  9. IE 兼容模式下不支持DIV CSS样式display:inline-block,解决

    样式改为: display: inline-block;*display: inline;zoom: 1; 就可以了

  10. UILable点击事件

    UILabel *lLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 19, 105, 1)]; lLabel.backgroundColor ...