热门标签 | 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开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
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社区 版权所有