ScrollVIEW 2000个ITEM不会卡
来源:互联网 发布:windows视频剪辑 编辑:程序博客网 时间:2024/05/18 21:41
</pre><pre name="code" class="csharp">using UnityEngine;using System.Collections.Generic; public class UIWrapGrid : MonoBehaviour{ Transform mTrans; UIPanel mPanel; UIScrollView mScroll; bool mHorizontal = false; bool mFirstTime = true; List<Transform> mChildren = new List<Transform>(); /// <summary> /// Initialize everything and register a callback with the UIPanel to be notified when the clipping region moves. /// </summary> protected virtual void Start () { InitGrid(); mFirstTime = false; } /// <summary> /// Cache the scroll view and return 'false' if the scroll view is not found. /// </summary> public void InitGrid() { mTrans = transform; mPanel = NGUITools.FindInParents<UIPanel>(gameObject); mScroll = mPanel.GetComponent<UIScrollView>(); if (mScroll != null) { mScroll.GetComponent<UIPanel>().onClipMove = OnMove; } mChildren.Clear(); for (int i = 0; i < mTrans.childCount; ++i) mChildren.Add(mTrans.GetChild(i)); // Sort the list of children so that they are in order mChildren.Sort(UIGrid.SortByName); if (mScroll == null) return; if (mScroll.movement == UIScrollView.Movement.Horizontal) mHorizontal = true; else if (mScroll.movement == UIScrollView.Movement.Vertical) mHorizontal = false; WrapContent(); } /// <summary> /// Callback triggered by the UIPanel when its clipping region moves (for example when it's being scrolled). /// </summary> protected virtual void OnMove (UIPanel panel) { WrapContent(); } void WrapContent() { Vector3[] corners = mPanel.worldCorners; for (int i = 0; i < 4; ++i) { Vector3 v = corners[i]; v = mTrans.InverseTransformPoint(v); corners[i] = v; } Vector3 center = Vector3.Lerp(corners[0], corners[2], 0.5f); if (mHorizontal) { //横向 for (int i = 0, imax = mChildren.Count; i < imax; ++i) { Transform t = mChildren[i]; float distance = t.localPosition.x - center.x; float min = corners[0].x - 100; float max = corners[2].x + 100; distance += mPanel.clipOffset.x - mTrans.localPosition.x; if (!UICamera.IsPressed(t.gameObject)) { NGUITools.SetActive(t.gameObject, (distance > min && distance < max), false); } } } else { //竖向 for (int i = 0, imax = mChildren.Count; i < imax; ++i) { Transform t = mChildren[i]; float distance = t.localPosition.y - center.y; float min = corners[0].y - 100; float max = corners[2].y + 100; distance += mPanel.clipOffset.y - mTrans.localPosition.y; if (!UICamera.IsPressed(t.gameObject)) { bool active = t.gameObject.activeSelf; bool willactive = distance > min && distance < max; if (active == willactive) continue; NGUITools.SetActive(t.gameObject, willactive, false); } } } }}
0 0
- ScrollVIEW 2000个ITEM不会卡
- scrollview中嵌套多个listview解决每个listview只显示一个item
- ListView只能显示第一个item问题(ScrollView嵌套ListView)
- 都不会个还是
- NGUI ScrollView 最彻底优化方案 加载大量(百万级)Item不卡的()
- cocos ScrollView(滚动容器)加载大量item导致的卡顿问题解决方案
- NGUI 的ScrollView如何让item居中
- scrollView上下滚item淡入淡出效果
- NGUI ScrollView让Item居中显示.
- ScrollView嵌套listView显示一条item解决办法
- IOS 设置ScrollView item的滚动位置
- ScrollView嵌套ListView冲突显示一个item
- 当scrollview嵌套多个recycleview,页面滑动卡顿
- android 浮动的View不会跟随ScrollView消失而消失
- ScrollView嵌套多个ListView
- scrollview嵌套n个gridview
- ScrollView嵌套多个ListView
- ScrollView嵌套多个ListView
- Gruph-cut
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- Java(Android)线程池
- LaTeX求和积分的上下限设置
- Java:类中代码的执行顺序
- ScrollVIEW 2000个ITEM不会卡
- Hashmap的hash算法
- 5-28 搜索树判断 (25分)
- MP-流程表单规则
- android 垃圾清理 文件清理
- Android四大组件之Service(服务)
- [Windows] VMware Workstation 12.0.0 Pro 正式版/注册码/注册机
- Java实现常见的7种排序算法
- JVM执行Java程序的过程中管理的内存空间