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. PHP 系列:PHP Web 开发基础

    PHP是动态类型的Web开发的脚本语言,PHP以页面文件作为加载和运行的单元,PHP现在有了Composer作为开发包管理. 1.使用Composer管理依赖 自从.NET开发用了Nuget管理程序集 ...

  2. 一个HTML5老兵坦言:我们真的需要“小程序”么?

    在PC时代,浏览器成为互联网信息的入口,并非因为它支持了HTML技术,而是因为它给人类带来了“世界是平的”的空间和理念,人类历史上第一次实现了信息的互联互通. 今天,微信虽然用了HTML5技术来做应用 ...

  3. 如何使用bat命令批量删除指定文件名字的符号

    新建一个TXT文本,将下面的内容复制进去 @Echo Off&SetLocal ENABLEDELAYEDEXPANSIONFOR %%a in (*) do (set "name= ...

  4. EntityFramework_MVC4中EF5 新手入门教程之一 ---1.创建实体框架数据模型

    Contoso University  Web 应用程序 你会在这些教程中构建的应用程序是一个简单的大学网站. 用户可以查看和更新学生. 课程和教师信息.这里有几个屏幕,您将创建. 这个网站的用户界面 ...

  5. Bootstrap3.0学习第十四轮(分页、徽章)

    详情请查看http://aehyok.com/Blog/Detail/21.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  6. JavaScript基础---语言基础(2)

    运算符 1.一元运算符 2.算术运算符 3.关系运算符 4.逻辑运算符 5.*位运算符 6.赋值运算符 7.其他运算符 8.运算符优先级 ECMA-262描述了一组用于操作数据值的运算符,包括一元运算 ...

  7. python 2.7的安装

    最近准备入手学习python 这里我是按照:http://blog.csdn.net/jcjc918/article/details/11022345 来的 我在安装python 3 的时候发现上下左 ...

  8. 从零开始设计SOA框架(三):请求参数的加密方式

    第二章中说明请求参数有哪些,主要是公共参数和业务参数,服务端需要对参数进行效验,已验证请求参数的合法性 参数效验前先解释下以下参数: 1.参数键值对:包括公共参数.业务参数      1.公共参数:按 ...

  9. Hibernate-Criteria用法

    criteria 英[kraɪˈtɪərɪə] 美[kraɪˈtɪrɪə] Hibernate 设计了 CriteriaSpecification Hibernate 设计了 CriteriaSpec ...

  10. Java基础-CGLIB动态代理

    JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继 ...