热门标签 | 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;其他逻辑请自己脑补吧





推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
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社区 版权所有