热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

unity中对于scrollview下拉加载的方法

首先提供下NGUI工具接口创建Panel父对象名

首先提供下NGUI工具接口

///

/// 创建Panel/// /// 父对象/// 名称/// 坐标/// Panel游戏对象public static GameObject createPanel(GameObject parent, string panelName, Vector3 pos){if (parent == null) return null;int depth = UIPanel.nextUnusedDepth;UIPanel panel = NGUITools.AddChild(parent);panel.depth = depth;panel.gameObject.name = panelName;panel.transform.localPosition = pos;panel.gameObject.layer = parent.layer;return panel.gameObject;}/// /// 创建可拖拽的裁剪区/// /// 要被裁剪的Panel/// 裁剪区区域和大小/// 拖拉方向/// 锚点/// 裁剪力度/// UIScrollView对象public static UIScrollView createClipAndDrag(GameObject dragPanel, Vector4 DragCenterAndRange, UIScrollView.Movement moveDiract,UIWidget.Pivot piovt, Vector2 clipSoftness){UIPanel panel = dragPanel.GetComponent();panel.clipping = UIDrawCall.Clipping.SoftClip; //裁剪方式//panel.baseClipRegion = DragCenterAndRange; //裁剪区区域和大小//panel.clipSoftness = clipSoftness; //裁剪力度//UIScrollView scrollPanel = dragPanel.AddComponent();scrollPanel.movement = moveDiract; //拖拉方向//scrollPanel.contentPivot = piovt; //锚点//scrollPanel.disableDragIfFits = true;return scrollPanel;}


然后改造一下NGUI的UIScrollView.cs脚本,添加onDrag托管,并添加到Drag()中调用

public OnDragNotification onDrag;///

/// Drag the object along the plane./// public void Drag (){if (UICamera.currentScheme == UICamera.ControlScheme.Controller) return;if (enabled && NGUITools.GetActive(gameObject) && mShouldMove){if (mDragID == -10) mDragID = UICamera.currentTouchID;UICamera.currentTouch.clickNotification = UICamera.ClickNotification.BasedOnDelta;// Prevents the drag "jump". Contributed by 'mixd' from the Tasharen forums.if (smoothDragStart && !mDragStarted){mDragStarted = true;mDragStartOffset = UICamera.currentTouch.totalDelta;if (onDragStarted != null) onDragStarted();}Ray ray = smoothDragStart ?UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos - mDragStartOffset) :UICamera.currentCamera.ScreenPointToRay(UICamera.currentTouch.pos);float dist = 0f;if (mPlane.Raycast(ray, out dist)){Vector3 currentPos = ray.GetPoint(dist);Vector3 offset = currentPos - mLastPos;mLastPos = currentPos;if (offset.x != 0f || offset.y != 0f || offset.z != 0f){offset = mTrans.InverseTransformDirection(offset);if (movement == Movement.Horizontal){offset.y = 0f;offset.z = 0f;}else if (movement == Movement.Vertical){offset.x = 0f;offset.z = 0f;}else if (movement == Movement.Unrestricted){offset.z = 0f;}else{offset.Scale((Vector3)customMovement);}offset = mTrans.TransformDirection(offset);}// Adjust the momentumif (dragEffect == DragEffect.None) mMomentum = Vector3.zero;else mMomentum = Vector3.Lerp(mMomentum, mMomentum + offset * (0.01f * momentumAmount), 0.67f);// Move the scroll viewif (!iOSDragEmulation || dragEffect != DragEffect.MomentumAndSpring){MoveAbsolute(offset);}else{Vector3 constraint = mPanel.CalculateConstrainOffset(bounds.min, bounds.max);if (constraint.magnitude > 1f){MoveAbsolute(offset * 0.5f);mMomentum *= 0.5f;}else{MoveAbsolute(offset);}}// We want to constrain the UI to be within boundsif (restrictWithinPanel &&mPanel.clipping != UIDrawCall.Clipping.None &&dragEffect != DragEffect.MomentumAndSpring){RestrictWithinBounds(true, canMoveHorizontally, canMoveVertically);}if (null != onDrag)onDrag();}}}


好了,创建列表

private GameObject m_dragPanel;private UIScrollView m_scrollView;///

/// 创建列表/// private void createDragList(){m_dragPanel = NGUIComponentFactory.createPanel(m_gamePanel, "dragPanel", Vector3.zero);m_scrollView = NGUIComponentFactory.createClipAndDrag(m_dragPanel, new Vector4(0, 29.5f, 500, 360),UIScrollView.Movement.Vertical, UIWidget.Pivot.Top, Vector2.one);m_scrollView.onDragFinished = onPanelDragFinished;m_scrollView.onDrag = onPanelOnDrag;//创建列表项//}



然后定义托管回掉函数

private UILabel m_loadMoreTips;private int m_curDisplayNum;private void onPanelDragFinished(){if (null !&#61; m_loadMoreTips){//创建更多项目//}}private void onPanelOnDrag(){if (null &#61;&#61; m_dragPanel || null &#61;&#61; m_scrollView) return;Vector3 constraint &#61; m_dragPanel.GetComponent().CalculateConstrainOffset(m_scrollView.bounds.min, m_scrollView.bounds.max);if (null &#61;&#61; m_loadMoreTips && constraint.y <0){m_loadMoreTips &#61; NGUIComponentFactory.createLabel(m_dragPanel, "tipsLoadMore", ResourceManager.instance.myFont,new Vector3(0, 250f - 102f * m_curDisplayNum - 85f, 0), 30);m_loadMoreTips.overflowMethod &#61; UILabel.Overflow.ResizeFreely;m_loadMoreTips.text &#61; "加载更多";}}

创建Label的接口如下

///

/// 创建Label/// /// 父对象/// 名称/// 字体/// 坐标/// 大小/// UILabel对象public static UILabel createLabel(GameObject parent, string labelName, UIFont font, Vector3 pos, int fontSize){UILabel lbl &#61; NGUITools.AddWidget(parent);lbl.gameObject.name &#61; labelName;lbl.bitmapFont &#61; font;lbl.fontSize &#61; fontSize;Transform transform &#61; lbl.gameObject.transform;transform.localPosition &#61; pos;return lbl;}




好了&#xff0c;其他逻辑请自己脑补吧





推荐阅读
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 在Java基础中,私有静态内部类是一种常见的设计模式,主要用于防止外部类的直接调用或实例化。这种内部类仅服务于其所属的外部类,确保了代码的封装性和安全性。通过分析JDK源码,我们可以发现许多常用类中都包含了私有静态内部类,这些内部类虽然功能强大,但其复杂性往往让人感到困惑。本文将深入探讨私有静态内部类的作用、实现方式及其在实际开发中的应用,帮助读者更好地理解和使用这一重要的编程技巧。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • oracle c3p0 dword 60,web_day10 dbcp c3p0 dbutils
    createdatabasemydbcharactersetutf8;alertdatabasemydbcharactersetutf8;1.自定义连接池为了不去经常创建连接和释放 ... [详细]
  • 本文主要探讨了Java中处理ActionEvent事件的接口,以及一些常见的编程问题和解决方案,包括方法重载、成员变量访问、镜片质量检测等。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
author-avatar
Eva绫波_772
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有