ScrollRect滑动优化(一)
来源:互联网 发布:电脑壁纸软件哪个好 编辑:程序博客网 时间:2024/06/05 21:57
Unity各个组件结构如下:
动态生成的item如下:
主要是重写了Scroll View中的ScrollRect的方法,item就生成在Content中,注意要和Layout Element同时使用,
效果比原生的要好,删除单个item的时候item表会自动排列,以及其他....
ScrollRectEx的代码就贴在下面了
using UnityEngine;using System.Collections;using UnityEngine.UI;using System;using UnityEngine.EventSystems;using UnityEngine.Events;public class ScrollRectEx : ScrollRect{ private bool routeToParent = false; public class ScrollEndEvent : UnityEvent { } public ScrollEndEvent onScrollTop = new ScrollEndEvent(); public ScrollEndEvent onScrollBottom = new ScrollEndEvent(); public ScrollEndEvent onScrollLeft = new ScrollEndEvent(); public ScrollEndEvent onScrollRight = new ScrollEndEvent(); /// <summary> /// Do action for all parents /// </summary> private void DoForParents<T>(Action<T> action) where T : IEventSystemHandler { Transform parent = transform.parent; while (parent != null) { foreach (var component in parent.GetComponents<Component>()) { if (component is T) action((T)(IEventSystemHandler)component); } parent = parent.parent; } } /// <summary> /// Always route initialize potential drag event to parents /// </summary> public override void OnInitializePotentialDrag(PointerEventData eventData) { DoForParents<IInitializePotentialDragHandler>((parent) => { parent.OnInitializePotentialDrag(eventData); }); base.OnInitializePotentialDrag(eventData); } /// <summary> /// Drag event /// </summary> public override void OnDrag(UnityEngine.EventSystems.PointerEventData eventData) { if (routeToParent) DoForParents<IDragHandler>((parent) => { parent.OnDrag(eventData); }); else base.OnDrag(eventData); } /// <summary> /// Begin drag event /// </summary> public override void OnBeginDrag(UnityEngine.EventSystems.PointerEventData eventData) { if (!horizontal && Math.Abs(eventData.delta.x) > Math.Abs(eventData.delta.y)) routeToParent = true; else if (!vertical && Math.Abs(eventData.delta.x) < Math.Abs(eventData.delta.y)) routeToParent = true; else routeToParent = false; if (routeToParent) DoForParents<IBeginDragHandler>((parent) => { parent.OnBeginDrag(eventData); }); else base.OnBeginDrag(eventData); } /// <summary> /// End drag event /// </summary> public override void OnEndDrag(UnityEngine.EventSystems.PointerEventData eventData) { if (routeToParent) DoForParents<IEndDragHandler>((parent) => { parent.OnEndDrag(eventData); }); else base.OnEndDrag(eventData); routeToParent = false; } public virtual void Update() { if(normalizedPosition.y > 1.0f) { if(onScrollTop != null) { onScrollTop.Invoke(); } } if (normalizedPosition.y < 0.0f) { if (onScrollBottom != null) { onScrollBottom.Invoke(); } } if (normalizedPosition.x > 1.0f) { if (onScrollLeft != null) { onScrollLeft.Invoke(); } } if (normalizedPosition.x < 0.0f) { if (onScrollRight != null) { onScrollRight.Invoke(); } } }}
阅读全文
0 0
- ScrollRect滑动优化(一)
- UGUI ScrollRect滑动定位优化
- UGUI ScrollRect滑动定位优化
- ScrollRect滑动优化(二)--动态创建Item列表
- UGUI ScrollRect 优化
- Unity优化之ScrollRect
- 优化UGUI的ScrollRect
- Unity之ScrollRect滑动居中
- 如何优化UGUI的ScrollRect
- 如何优化UGUI的ScrollRect
- scrollRect
- UGUI Scrollrect滚动优化:无限循环利用
- Unity中ScrollRect锁定元素详述(一)
- UGUI之ScrollRect添加响应事件后不能滑动
- UGUI ScrollRect滑动居中CenterOnChild实现(修改)
- UGUI ScrollRect滚动优化:无限循环利用Item
- 【Unity】优化UGUI 滚动条ScrollRect(高效复用)
- UGUI处理ScrollRect的滑动被OnDrag函数拦截的一点技巧
- 源码解读腾讯 GT 的性能测试方案
- POJ 2409 Let it Bead (Polya计数)
- Juniper防火墙无法登陆的问题解决
- Android 逐行读取本地文件
- 解决IDEA16闪退的问题
- ScrollRect滑动优化(一)
- 【技术分享】Windows内核池漏洞利用技术
- 小甲鱼课程学习001-015
- 1279: 两点距离
- JDBC为什么要使用PreparedStatement而不是Statement
- SLAM算法解析:抓住视觉SLAM难点,了解技术发展大趋势
- js获取url路径参数
- 08. FTP 文件传输 ❀ 数据包分析工具 Wireshark
- Android开发: 将Sqlite数据库导入Excel表格当中