Unity笔记之下拉刷新列表

这样的效果;
代码:
using System;
using System.Collections;
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class ScrollRectUpdateView : MonoBehaviour, IBeginDragHandler, IEndDragHandler, IDragHandler
{private ScrollRect scrollRect;[SerializeField] private RectTransform contentTransform;[SerializeField] private ScrollRefreshInfo upRefreshInfo;[SerializeField] private ScrollRefreshInfo downRefreshInfo;private bool isUpRefresh;private bool isDownRefresh;private bool isRefreshing;[SerializeField] [ReadOnly] float refreshNumber = 100;[SerializeField] [ReadOnly] float canRefreshNumber = 50;private Action upAction;private Action downAction;private void Awake(){this.scrollRect = this.GetComponent<ScrollRect>();if (scrollRect == null) throw new NullReferenceException();upRefreshInfo.ShowAndHideSelf(false);downRefreshInfo.ShowAndHideSelf(false);this.isUpRefresh = false;this.isDownRefresh = false;isRefreshing = false;}public void OnBeginDrag(PointerEventData eventData){if (this.isRefreshing) return;}public void OnDrag(PointerEventData eventData){if (this.isRefreshing) return;var rectTransform = this.transform.GetComponent<RectTransform>();float height = 0f;var childCount = this.contentTransform.childCount;var child = this.contentTransform.GetChild(1).GetComponent<RectTransform>();if (this.contentTransform.TryGetComponent(out VerticalLayoutGroup group)){height = child.rect.height * (childCount - 2) + group.spacing * (childCount - 3) - rectTransform.rect.height;}elseheight = child.rect.height * (childCount - 2) - rectTransform.rect.height;var he = this.contentTransform.anchoredPosition.y - height;Debug.Log($"one : {he}, two : {height}");// Upif (this.contentTransform.anchoredPosition.y < 0){this.upRefreshInfo.ShowAndHideSelf(true);if (contentTransform.anchoredPosition.y - child.rect.height >= -this.canRefreshNumber){this.upRefreshInfo.SetContent("下拉可刷新");this.isUpRefresh = false;}else if (contentTransform.anchoredPosition.y - child.rect.height <= -this.refreshNumber){this.upRefreshInfo.SetContent("释放后刷新");this.isUpRefresh = true;}}else{this.isUpRefresh = false;this.upRefreshInfo.ShowAndHideSelf(false);}// downif (he > 0){this.downRefreshInfo.ShowAndHideSelf(true);if (he <= this.canRefreshNumber){this.downRefreshInfo.SetContent("上拉可刷新");this.isDownRefresh = false;}else if (he >= this.refreshNumber){this.downRefreshInfo.SetContent("释放后刷新");this.isDownRefresh = true;}}else{this.isDownRefresh = false;this.downRefreshInfo.ShowAndHideSelf(false);}}public void OnEndDrag(PointerEventData eventData){if (this.isRefreshing) return;if (this.isUpRefresh){Debug.Log("开始刷新 Up");StartCoroutine(RefreshData(this.upRefreshInfo));}else if (this.isDownRefresh){Debug.Log("开始刷新 Down");StartCoroutine(RefreshData(this.downRefreshInfo));}else{this.upRefreshInfo.ShowAndHideSelf(false);this.downRefreshInfo.ShowAndHideSelf(false);}}private IEnumerator RefreshData(ScrollRefreshInfo info){isRefreshing = true;info.SetContent("刷新中");yield return new WaitForSeconds(3);info.SetContent("刷新成功");yield return new WaitForSeconds(2);info.SetContent("释放后刷新");info.ShowAndHideSelf(false);this.isUpRefresh = false;this.isDownRefresh = false;isRefreshing = false;}
}
ScrollRefreshInfo.cs
using TMPro;
using UnityEngine;public class ScrollRefreshInfo : MonoBehaviour
{private string oldStr;[SerializeField] private GameObject imgRefresh;[SerializeField] private TMP_Text txtContent;public void SetContent(string str){if (this.oldStr == str) return;this.txtContent.text = str;this.oldStr = str;Debug.Log(str);}public void ShowAndHideSelf(bool isShow){if (this.gameObject.activeSelf != isShow)this.gameObject.SetActive(isShow);}
}
场景:


就这些了。
相关文章:
Unity笔记之下拉刷新列表
这样的效果; 代码: using System; using System.Collections; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class ScrollRectUpdateView : Mon…...
防火墙操作!
当小编在Linux服务器上部署好程序以后,但是输入URL出现下述情况,原来是防火墙的原因!! 下面是一些防火墙操作! 为保证系统安全,服务器的防火墙不建议关闭!! 但是,我们可…...
代码随想录算法训练营第四十一天| 343. 整数拆分,96.不同的二叉搜索树
题目与题解 343. 整数拆分 题目链接:343. 整数拆分 代码随想录题解:343. 整数拆分 视频讲解:动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分_哔哩哔哩_bilibili 解题思路: 一眼懵…...
【MATLAB源码-第53期】m代码基于粒子群算法(PSO)的三维路径规划,显示最优路径和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 粒子群算法(Particle Swarm Optimization,简称PSO)是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述: 基本思想: 鸟群在寻找食物时,每只鸟都…...
el-table多行合并
背景 前端统计列表,数据乱序。按日期、产品、阶段、DD项(所有header名称乱写)排序,列表如下。 示例 日期产品阶段DDEEFFGG20240414产品1阶段1场景1A01场景2B01其他A0120240410产品1阶段1场景2B01其他A0120240402产品2阶段1场景3…...
Vue3 + Element-Plus 使用 Table 插槽时数据未及时更新
Vue3 Element-Plus 使用 Table 插槽时数据未及时更新 问题重现解决方法最终效果 问题重现 这里我已经通过二级分类 id 查询到一级分类和二级分类,但是使用插槽和 v-for 渲染出来还是之前的分类 id,但是一点击表格或者保存代码他又能正常刷新出来。 <…...
vue 2 怎么把2024-04-13T17:42:19转换成短日期格式
我们在日常开发过程中,通常会将日期格式在entity中设置成LocalDateTime。这样就有一个麻烦,我们在前端展示这个日期的时候就会变成2024-04-13T17:42:19。这显然不是我们所要的效果,所以我们今天来解决这个问题,让前端展示正确的日…...
网络IO模型以及实际应用
网络IO模型 本文主要介绍了几种不同的网络IO模型,以及实际应用中使用到的Reactor模型等。 我们常说的网络IO模型,主要包含阻塞IO、非阻塞IO、多路复用IO、信号驱动IO、异步IO。 根据第一个阶段:是否需要阻塞,分为阻塞和非阻塞IO。…...
一文详解MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM及其关系
经常遇到很多系统,比如:MES、ERP、SCM、WMS、APS、SCADA、PLM、QMS、CRM、EAM,这些都是什么系统?有什么功能和作用?它们之间的关系是怎样的? 今天就一文详细分享给大家。 10大系统之间的关系 ERP 和其他…...
《Kubernetes部署篇:基于Kylin V10+ARM架构CPU使用containerd部署K8S 1.26.15集群(一主多从)》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大概时间有10s多,这个时间太长了,尝试了各种办法,都解决不了,后面尝试安装了了1.26.…...
maven命令
mvn archetype:generate 创建 Maven 项目 mvn compile 编译源代码 mvn deploy 发布项目 mvn test-compile 编译测试源代码 mvn test 运行应用程序中的单元测试 mvn site 生成项目相关信息的网站 mvn clean 清除项目目录中的生成结果 mvn package 根据项目生成的 jar mvn instal…...
jetson系列开发板使用虚拟机烧录系统时,遇见无法识别开发板的情况
在双系统中的ubuntu系统烧录没问题,但是电脑Ubuntu系统由于版本低,所以没有网络,烧录起来还的连网线,所以问了开发板的工程师,所幸,解决了问题,很感谢工程师的指导,特此记录一下&…...
【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2
目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数(先序遍历):Swap 函数(中序遍历) 不可行:Swap 函数(后序遍历)ÿ…...
Cesium之home键开关及相机位置设置
显隐控制 设置代码中的homeButton var TDT_IMG_C "https://{s}.tianditu.gov.cn/img_c/wmts?servicewmts&requestGetTile&version1.0.0" "&LAYERimg&tileMatrixSetc&TileMatrix{TileMatrix}&TileRow{TileRow}&TileCol{TileCol}…...
FreeRTOS_day1
1.总结keil5下载代码和编译代码需要注意的事项 下载代码前要对仿真进行设置 勾选后代码会立刻执行 勾选后会导致代码不能执行 写代码的时候要写在对应的begin和end之间,否则会被覆盖 2.总结STM32Cubemx的使用方法和需要注意的事项 ①打开软件,新建工程…...
Nginx日志格式化和追踪
背景 Nginx是一款功能强大的Web服务器,对于网络环境中的日志记录和配置至关重要。定制化Nginx日志格式可以帮助管理员更好地监控服务器性能、分析用户行为并做出相应优化。在本文中,我们将深入探讨Nginx日志格式的高级定制化策略,包括理解基…...
华为交换机配置telnet SSH登录步骤
这次项目中的交换机是华为 S5735-L24T4X 需要配置telnet和 SSH登录 在平时项目中发现,华为不同型号,不同版本的配置命令也是不同,(这不是脑子有问题吗? 干啥搞成不一样的) 本次型号:S5735-L2…...
市面上加密混淆软件的比较和推荐
引言 市面上有许多加密混淆软件可供开发者使用,但哪些软件是最好用的?哪些软件受到开发者的喜爱?本文将根据一次在CSDN上的投票结果,为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果,希望能对大家的选择…...
最新AI创作系统ChatGPT网站源码AI绘画,GPTs,AI换脸支持,GPT联网提问、DALL-E3文生图
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…...
电视盒子哪个好?2024口碑网络电视盒子排行榜
多年来电视盒子始终占据重要地位,功能上并没有受到影响。在这么多品牌中哪些电视盒子的评价是最好的呢?小编根据各大电商平台的用户评价情况整理了口碑最好的网络电视盒子排行榜,跟着小编一起看看市面上的电视盒子哪个好吧。 TOP 1࿱…...
如何高效优化多语言模型:专业部署的完整策略
如何高效优化多语言模型:专业部署的完整策略 【免费下载链接】paraphrase-multilingual-MiniLM-L12-v2 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/paraphrase-multilingual-MiniLM-L12-v2 你是否在部署多语言文本嵌入模型时遭遇过"显存…...
这次终于选对了!高效论文写作全流程一键生成论文工具推荐(2026 最新)
论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节,以下工具按环节精准匹配,兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求,覆盖免费/付费、通用/垂直场景。2026年&am…...
当Logo消失,品牌资产还剩多少?
这个问题问得直接——品牌费尽心思把Logo放大、放正、放在C位,可如果有一天消费者真的“看不见”它,品牌还剩下什么?答案取决于品牌建设的本质:是在做识别符号,还是在做价值沉淀。1. 认知资产:剩不下什么Lo…...
Ubuntu 22.04 换源+Docker安装+镜像加速
Ubuntu 22.04 换源Docker安装镜像加速 前言 本文针对 Ubuntu 22.04 LTS 系统,先更换国内镜像源提升下载速度,再完成 Docker 引擎与 Compose 插件安装,最后配置 Docker 国内镜像加速,全程无报错、可直接复制执行,适配 V…...
VOOHU 沃虎电子 千兆PoE+集成式RJ45连接器 SYT411Q199DB2A1DP 内置网络变压器 支持720mA供电 适用于PoE交换机与无线AP
苏州沃虎电子科技有限公司(品牌:VOOHU)供应的 SYT411Q199DB2A1DP 是一款高性能千兆集成式RJ45连接器,内置符合IEEE 802.3at标准的网络变压器,支持PoE(高达720mA)供电。该产品采用90侧插DIP封装&…...
Android10音频系统实战:如何自定义音量曲线(附default_volume_tables.xml修改指南)
Android 10音频系统深度定制:音量曲线调优实战手册 在移动设备音频体验的精细打磨中,音量曲线的定制往往是最容易被忽视却至关重要的环节。作为一名长期从事Android系统定制的开发者,我曾为多款旗舰设备调整过音频参数,发现原厂音…...
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷 第一次用熵值法做综合评价时,我盯着屏幕上几乎相同的权重值发愣——这和教科书上"差异越大权重越高"的描述完全不符。直到深夜排查才发现,原来在数据标…...
3款工业调试开源工具让Modbus通讯诊断效率提升80%
3款工业调试开源工具让Modbus通讯诊断效率提升80% 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 在工业自动化领域,Modbus协议作为设备间通讯的"通用…...
告别爆显存!在16G显卡上高效训练SDXL LORA的完整配置流程
16G显卡极限优化:SDXL LORA训练全流程实战指南 引言 当你手握一块RTX 4060 Ti或4070这样的16G显存显卡,想要尝试SDXL LORA训练时,是否常被爆显存的恐惧支配?别担心,这不是硬件性能的终点,而是优化艺术的起点…...
国金证券QMT实盘连接指南:手把手教你配置交易环境与策略回测
国金证券QMT实盘连接实战:从环境搭建到策略部署全解析 引言 在量化交易的世界里,工具的选择往往决定了策略执行的效率与稳定性。国金证券QMT作为国内主流的量化交易平台之一,以其稳定的实盘连接能力和丰富的API接口受到众多量化交易者的青睐。…...
