UIGridView 源码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//Introduction: 无限列表
//Content上禁止挂载ContentSizeFilter和LayOutGroup之类组件
[DisallowMultipleComponent]
[RequireComponent(typeof(ScrollRect))]
public class UIGridView : MonoBehaviour
{private Action<Transform, int> _handle;public enum Arrangement{Horizontal = 0,Vertical,}public enum HorizontalAlign{Left,Middle,Right,}public enum VerticalAlign{Top,Middle,Bottom,}public Arrangement arrangement = Arrangement.Vertical;// 当选择水平或垂直流动是有用,指每行/列最大个数public int MaxPerLine{get { return maxPerLine; }set { SetMaxPerLine(value); }}public HorizontalAlign horizontalAlign = HorizontalAlign.Left;public VerticalAlign verticalAlign = VerticalAlign.Top;public Vector2 viewPort;public float rowSpace = 0;public float columuSpace = 0;public float marginTop = 0;public float marginBottom = 0;public float marginLeft = 0;public float marginRight = 0;public int maxPerLine;public int childCount; //需要渲染的总数据个数public GameObject item;public GameObject Child{get { return item; }set { SetItem(value); }}public int ChildCount{get { return childCount; }set { SetChildCount(value, true); }}public Vector2 ViewPort{get { return viewPort; }set { SetViewPort(value); }}ScrollRect scrollRect;RectTransform content;Vector2 itemSize;List<Transform> items;Dictionary<int, int> contains;List<int> outOfContains;int scrollLineIndex; //当前第一个元素索引int totalCount; //在UI中显示的个数(不乘以maxPerLine)Vector2 startPos; //第一个元素所在位置int startIndex; //当前渲染起始坐标int endIndex; //当前渲染结束坐标void Start(){maxPerLine = maxPerLine == 0 ? 1 : maxPerLine;items = new List<Transform>();contains = new Dictionary<int, int>();outOfContains = new List<int>();scrollRect = transform.GetComponent<ScrollRect>();content = scrollRect.content;if (content == null){Debug.Log("ScrollRect " + scrollRect.gameObject.name + " Has No Content, Please Check And Retry.");return;}//viewPort = scrollRect.viewport.rect.size;if (item != null)SetItem(item);content.anchorMax = new Vector2(0, 1);content.anchorMin = new Vector2(0, 1);content.pivot = new Vector2(0, 1);ReBuild();}public void ReBuild(){if (scrollRect == null || content == null || item == null) return;ResetChildren();Vector2 maskSize = viewPort;int count = 0;if (arrangement == Arrangement.Horizontal){count = Mathf.CeilToInt(maskSize.x / itemSize.x) + 1; //横向列数startPos = Vector2.zero;startPos.x = marginLeft;if (verticalAlign == VerticalAlign.Top){startPos.y = -marginTop;}else if (verticalAlign == VerticalAlign.Middle){startPos.y = -(maskSize.y * 0.5f - (itemSize.y * maxPerLine + (maxPerLine - 1) * rowSpace) * 0.5f);}else if (verticalAlign == VerticalAlign.Bottom){startPos.y = -(maskSize.y - marginBottom - itemSize.y * maxPerLine - rowSpace * (maxPerLine - 1));}}else if (arrangement == Arrangement.Vertical){count = Mathf.CeilToInt(maskSize.y / itemSize.y) + 1; //竖向行数startPos = Vector2.zero;startPos.y = -marginTop; //重置开始节点位置if (horizontalAlign == HorizontalAlign.Left){startPos.x = marginLeft;}else if (horizontalAlign == HorizontalAlign.Middle){startPos.x = (maskSize.x * 0.5f - (itemSize.x * maxPerLine + (maxPerLine - 1) * columuSpace) * 0.5f);}else if (horizontalAlign == HorizontalAlign.Right){startPos.x = maskSize.x - marginRight - itemSize.x * maxPerLine - columuSpace * (maxPerLine - 1);}}totalCount = count;SetChildCount(childCount, true);BackTop();scrollRect.onValueChanged.RemoveAllListeners();scrollRect.onValueChanged.AddListener(OnValueChanged);}//列表滚动private void OnValueChanged(Vector2 vec){switch (arrangement){case Arrangement.Horizontal:vec.x = Mathf.Clamp(vec.x, 0, 1);break;case Arrangement.Vertical:vec.y = Mathf.Clamp(vec.y, 0, 1);break;}int curLineIndex = GetCurLineIndex();if (curLineIndex != scrollLineIndex)UpdateRectItem(curLineIndex, false);}private int GetCurLineIndex(){switch (arrangement){case Arrangement.Horizontal:returnMathf.FloorToInt(Mathf.Abs(content.anchoredPosition.x < 0.1f ? content.anchoredPosition.x : 0.1f - marginLeft) /(columuSpace + itemSize.x));case Arrangement.Vertical:returnMathf.FloorToInt(Mathf.Abs(content.anchoredPosition.y > -0.1f ? content.anchoredPosition.y : -0.1f - marginTop) /(rowSpace + itemSize.y));}return 0;}private void UpdateRectItem(int curLineIndex, bool forceRender){if (curLineIndex < 0)return;startIndex = curLineIndex * maxPerLine;endIndex = (curLineIndex + totalCount) * maxPerLine;if (endIndex >= childCount)endIndex = childCount;contains.Clear(); //渲染序号outOfContains.Clear(); //items的索引for (int i = 0; i < items.Count; i++)//如果当前已渲染的item中包含{int index = int.Parse(items[i].gameObject.name);if (index < startIndex || index >= endIndex){outOfContains.Add(i);items[i].gameObject.SetActive(false);}else{items[i].gameObject.SetActive(true);contains.Add(index, i);}}// *************更改渲染****************for (int i = startIndex; i < endIndex; i++){if (!contains.ContainsKey(i)){Transform child = items[outOfContains[0]];outOfContains.RemoveAt(0);child.gameObject.SetActive(true);int row = i / maxPerLine;int col = i % maxPerLine;if (arrangement == Arrangement.Vertical)child.localPosition = startPos +new Vector2(col * itemSize.x + (col) * columuSpace,-row * itemSize.y - (row) * rowSpace);elsechild.localPosition = startPos +new Vector2(row * itemSize.x + (row) * columuSpace,-col * itemSize.y - (col) * rowSpace);child.gameObject.name = i.ToString();if (_handle != null)_handle(child, i);}else if (forceRender){if (_handle != null)_handle(items[contains[i]], i);}}scrollLineIndex = curLineIndex;}/// 移除当前所有private void ResetChildren(){items.Clear();for (int i = 0; i < content.childCount; i++){Transform child = content.GetChild(i);child.gameObject.SetActive(false);}}// 创建新节点private RectTransform CreateItem(int index){Transform child;if (content.childCount > index){child = content.GetChild(index);}else{GameObject obj = GameObject.Instantiate(item) as GameObject;obj.transform.SetParent(content);obj.transform.localScale = Vector3.one;child = obj.transform;}child.gameObject.name = index.ToString();items.Add(child);return child as RectTransform;}// 设置资源public void SetItem(GameObject child){if (child == null) return;this.item = child;RectTransform itemTrans = child.transform as RectTransform;itemTrans.pivot = new Vector2(0, 1);itemSize = itemTrans.sizeDelta;//ReBuild();}// 更新需要渲染的个数public void SetChildCount(int value, bool forceRender){if (value < 0) childCount = 0;else childCount = value;if (totalCount <= 0)//还未初始化return;if (value > items.Count && items.Count < maxPerLine * totalCount){//当前格子数量少于应生成的数量int count = items.Count;int max = value < maxPerLine * totalCount ? value : maxPerLine * totalCount;for (int i = count; i < max; i++){int row = i / maxPerLine;int col = i % maxPerLine;RectTransform child = CreateItem(i);if (arrangement == Arrangement.Vertical)child.localPosition = startPos +new Vector2(col * itemSize.x + (col) * columuSpace,-row * itemSize.y - (row) * rowSpace);elsechild.localPosition = startPos +new Vector2(row * itemSize.x + (row) * columuSpace,-col * itemSize.y - (col) * rowSpace);}}if (content == null) return;int rc = Mathf.CeilToInt((float)childCount / (float)maxPerLine); //设置content的大小if (arrangement == Arrangement.Horizontal){content.sizeDelta = new Vector2(marginLeft + marginRight + itemSize.x * rc + columuSpace * (rc - 1),viewPort.y);if (content.sizeDelta.x > viewPort.x && content.anchoredPosition.x < viewPort.x - content.sizeDelta.x)content.anchoredPosition = new Vector2(viewPort.x - content.sizeDelta.x, content.anchoredPosition.y);}else{content.sizeDelta = new Vector2(viewPort.x, marginTop + marginBottom + itemSize.y * rc + rowSpace * (rc - 1));if (content.sizeDelta.y > viewPort.y && content.anchoredPosition.y > content.sizeDelta.y - viewPort.y)content.anchoredPosition = new Vector2(content.anchoredPosition.x, content.sizeDelta.y - viewPort.y);}UpdateRectItem(GetCurLineIndex(), true);}// 添加子节点public void AddChild(int index){if (index < 0) return;startIndex = scrollLineIndex * maxPerLine;endIndex = (scrollLineIndex + totalCount) * maxPerLine;SetChildCount(childCount + 1, index >= startIndex && index < endIndex);}// 删除子节点public void RemoveChild(int index){if (index < 0 || index >= childCount) return;startIndex = scrollLineIndex * maxPerLine;endIndex = (scrollLineIndex + totalCount) * maxPerLine;SetChildCount(childCount - 1, index >= startIndex && index < endIndex);}// <summary>// 设置显示窗口大小(现在貌似可以废弃了)public void SetViewPort(Vector2 port){if (port == viewPort) return;viewPort = port;//ReBuild();}// 设置行列最大public void SetMaxPerLine(int max){maxPerLine = max;//ReBuild();}// 返回顶部public void BackTop(){content.localPosition = Vector3.zero;UpdateRectItem(0, true);}// 返回底部public void BackBottom(){if (arrangement == Arrangement.Vertical){content.localPosition = new Vector3(0, -viewPort.y + content.sizeDelta.y, 0);}else{content.localPosition = new Vector3(viewPort.x - content.sizeDelta.x, 0);}UpdateRectItem(Mathf.CeilToInt((float)childCount / (float)maxPerLine) - totalCount + 1, true);}public void RefreshViewItem(){UpdateRectItem(scrollLineIndex, true);}public void SetArrangement(int arr){arrangement = (Arrangement)arr;}public void SetHorizontal(int h){horizontalAlign = (HorizontalAlign)h;}public void SetVerticle(int v){verticalAlign = (VerticalAlign)v;}public void AddChangeItemListener(Action<Transform, int> handle){_handle = handle;}
}

 示例:
Lua应用示例:

local Tool = require("Tool")local SprogExtendWindow = {}local mediate = nil
local gridView = nil
local extendItem = nil
local extendItemInfo = nil
local sortList = nil
local extendCfgs = nillocal rewardState = 
{UNFINISH = 0,  --可领取UNREACH  = 1,  --未达成FINISHED = 2,  --已领取
}function SprogExtendWindow.Init(data)mediate = data-- 创建ITEM实例ResMgr.LoadAssets("prefab", { "SprogExtendItem" },function(objs)extendItem = objs[0]end)extendItemInfo = {} -- 服务器下发数据sortList = {} -- 前端已排序处理,用于显示的数据SprogExtendWindow.InitGridView()SprogExtendWindow.RegistEvents()SprogExtendWindow.UpdateAllExtendInfo()return SprogExtendWindow
endfunction SprogExtendWindow.InitGridView()gridView = mediate:FindChild("Layer_Sprite/panelGroup/extendPanel/bottom/Scroll View"):GetComponent("UIGridView") -- 获取UIGridView组件gridView.maxPerLine = 1gridView.rowSpace = 1gridView:SetItem(extendItem)gridView:SetViewPort(Vector2(565,325))-- 在ScrollView拖动时,UIGridView会回调即将出现的item,客户端只需要填入相应的UI数据.-- PS: 此函数会不停地调用,得考虑性能问题,避免处理过大的数据gridView:AddChangeItemListener(function(transform, index)local index = index + 1if sortList and sortList[index] thenlocal item = sortList[index]Tool.subGetObject(transform, "time", "Text").text = item.config.time .. " " .. item.config.idTool.subGetObject(transform, "content", "Text").text = item.config.nameTool.subGetObject(transform, "image", "Image").sprite = Tool.LoadImgSpriteFromAb("image", item.config.img)SprogExtendWindow.SetStateInfo(item.state, transform)transform:FindChild("Button").onClick = function(obj, eventData)SprogExtendWindow.CheckExtendItemInfo(item.config.id, transform)endendend)endfunction SprogExtendWindow.RegistEvents()mediate:AddClick("Layer_Sprite/panelGroup/extendPanel/top/btn_num", function () log("按钮1")end)mediate:AddClick("Layer_Sprite/panelGroup/extendPanel/top/btn_link", function () log("按钮2")end)mediate:AddClick("Layer_Sprite/panelGroup/extendPanel/top/btn_share", function () log("按钮3")end)
endfunction SprogExtendWindow.InitScrollView()endfunction SprogExtendWindow.UpdateAllExtendInfo()-- TEST,选用临时数据local data = {[1] = {id = 1, type = 1, time = "2020.01.01", name = "床", img = "yxdt_tx1.png", vip = 1, liquanNum = 99999},[2] = {id = 2, type = 1, time = "2020.01.02", name = "前", img = "yxdt_tx1.png", vip = 2, liquanNum = 99999},[3] = {id = 3, type = 1, time = "2020.01.03", name = "明", img = "yxdt_tx1.png", vip = 3, liquanNum = 99999},[4] = {id = 4, type = 1, time = "2020.01.04", name = "月", img = "yxdt_tx1.png", vip = 4, liquanNum = 99999},[5] = {id = 5, type = 1, time = "2020.01.05", name = "光", img = "yxdt_tx1.png", vip = 5, liquanNum = 99999},[6] = {id = 6, type = 1, time = "2020.01.06", name = "床", img = "yxdt_tx1.png", vip = 6, liquanNum = 99999},[7] = {id = 7, type = 1, time = "2020.01.07", name = "前", img = "yxdt_tx1.png", vip = 7, liquanNum = 99999},   [8] = {id = 8, type = 1, time = "2020.01.08", name = "明", img = "yxdt_tx1.png", vip = 8, liquanNum = 99999},[9] = {id = 9, type = 1, time = "2020.01.09", name = "月", img = "yxdt_tx1.png", vip = 9, liquanNum = 99999},[10] = {id = 10, type = 1, time = "2020.01.10", name = "光", img = "yxdt_tx1.png", vip = 10, liquanNum = 99999},[11] = {id = 11, type = 1, time = "2020.01.01", name = "床", img = "yxdt_tx1.png", vip = 1, liquanNum = 99999},[12] = {id = 12, type = 1, time = "2020.01.02", name = "前", img = "yxdt_tx1.png", vip = 2, liquanNum = 99999},[13] = {id = 13, type = 1, time = "2020.01.03", name = "明", img = "yxdt_tx1.png", vip = 3, liquanNum = 99999},[14] = {id = 14, type = 1, time = "2020.01.04", name = "月", img = "yxdt_tx1.png", vip = 4, liquanNum = 99999},[15] = {id = 15, type = 1, time = "2020.01.05", name = "光", img = "yxdt_tx1.png", vip = 5, liquanNum = 99999},[16] = {id = 16, type = 1, time = "2020.01.06", name = "床", img = "yxdt_tx1.png", vip = 6, liquanNum = 99999},[17] = {id = 17, type = 1, time = "2020.01.07", name = "前", img = "yxdt_tx1.png", vip = 7, liquanNum = 99999},   [18] = {id = 18, type = 1, time = "2020.01.08", name = "明", img = "yxdt_tx1.png", vip = 8, liquanNum = 99999},[19] = {id = 19, type = 1, time = "2020.01.09", name = "月", img = "yxdt_tx1.png", vip = 9, liquanNum = 99999},[20] = {id = 20, type = 1, time = "2020.01.10", name = "光", img = "yxdt_tx1.png", vip = 10, liquanNum = 99999},[21] = {id = 21, type = 1, time = "2020.01.01", name = "床", img = "yxdt_tx1.png", vip = 1, liquanNum = 99999},[22] = {id = 22, type = 1, time = "2020.01.02", name = "前", img = "yxdt_tx1.png", vip = 2, liquanNum = 99999},[23] = {id = 23, type = 1, time = "2020.01.03", name = "明", img = "yxdt_tx1.png", vip = 3, liquanNum = 99999},[24] = {id = 24, type = 1, time = "2020.01.04", name = "月", img = "yxdt_tx1.png", vip = 4, liquanNum = 99999},[25] = {id = 25, type = 1, time = "2020.01.05", name = "光", img = "yxdt_tx1.png", vip = 5, liquanNum = 99999}} extendItemInfo = {}for k, v in ipairs(data) doextendItemInfo[v.id] = {   config = v, -- 本地配置state = math.random(0, 2) -- 随机一个状态}endSprogExtendWindow.OnSortAllExtendItem()gridView.ChildCount = #sortList -- 设置当前item总数gridView:ReBuild() -- 启动UIGridView
end-- 整理数据并排序
function SprogExtendWindow.OnSortAllExtendItem()-- 按rewardState分组, 可领取>未达成>已领取local templist = {}for index = 1, 3 dofor _,v in ipairs(extendItemInfo) doif index == v.state + 1 thenif templist[index] == nil thentemplist[index] = {}endtable.insert(templist[index], v)endendend-- 每组按VIP等级排序for _,v in ipairs(templist) dotable.sort(v, function (a, b)return a.config.vip > b.config.vipend)endsortList = {}for _,v in ipairs(templist) dofor _,m in ipairs(v) dotable.insert(sortList, m)endend-- log("排序后列表 " .. tostring(sortList))
endfunction SprogExtendWindow.SetStateInfo(state, obj)local text = nillocal isInteract = nilif state == rewardState.UNREACH thentext = "未达成"isInteract = falseelseif state == rewardState.UNFINISH thentext =  "可领取"isInteract = trueelseif state == rewardState.FINISHED thentext =  "已领取"isInteract = falseendobj.transform:FindChild("Button").interactable = isInteractTool.subGetObject(obj, "Button/Text", "Text").text = text
endfunction SprogExtendWindow.CheckExtendItemInfo(id, obj)if extendItemInfo ~= nil and extendItemInfo[id] ~= nil thenlocal item = extendItemInfo[id]local reqSuccess = function(www)--local data = Json.decode(www.text).datalog("领取成功,data: " .. CC.uu.Dump(data))item.state = 2SprogExtendWindow.SetStateInfo(item.state, obj)endlocal reqFailed = function(err)log("领取失败:" .. tostring(err))end-- 发送请求local Url = Tool.UrlMgr.UrlMapping("http://172.0.0.1:8000/GetTestData", {id = id, channelId = id})Tool.HttpPost(Url, nil, reqSuccess, reqSuccess)end
endfunction SprogExtendWindow.Destroy()endreturn SprogExtendWindow

 

Unity组件挂载:








查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Android 和H5之间的交互-框架篇

    就目前而言,app的开发主要分三个方向:native app、hybrid app以及web app。个人感觉三种app的体验感是逐渐递减的。hybrid app和web app的开发的不同之处就是前者需要自己提供和实现前端需要的接口,而后者则是借助一些框架(比如icon、dcloud等)。实质上都差不多,但前者更灵…...

    2024/4/30 13:13:37
  2. Python 3 cookbook 学习笔记(一)

    全书链接:https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html 最近在看这本书,感觉知识点挺丰富,结合个人理解和需要,整理并记录下学习点。 1.1 解压分解序列 通过赋值操作可以实现对可迭代对象的解压分解。 # 分解元组, 得到 x = 4, y = 5 x,y = (4,5)# 分…...

    2024/5/7 6:09:48
  3. SDK和API的区别

    SDK和API的区别?...

    2024/4/24 11:51:30
  4. 诺禾致源、ASP.NET Core中间件与HttpModule有何不同

    ASP.NET Core中间件与HttpModule有何不同 前言 在ASP.NET Core中最大的更改之一是对Http恳求管道的更改,在ASP.NET中我们理解HttpHandler和HttpModule但是到如今这些曾经被交换为中间件那么下面我们来看一下他们的不同处。 HttpHandler Handlers处置基于扩展的特定恳求,HttpH…...

    2024/4/24 11:51:28
  5. CS:GO API电竞数据接口【选手信息】数据库调用示例代码

    CS:GO电竞API专用数据接口 分享使用代码 分享使用 野子数据 http://www.yezishuju.com/ 电竞API数据接口调用的示例代码 接口分为: CS:GO【战队列表】 CS:GO【选手信息】 CS:GO【历史对战】 CS:GO【赛事数据】 CS:GO【赛事列表】 示例演示:CSGO的【选手信息】接口 具体如下:…...

    2024/4/24 11:51:27
  6. 知识付费系统源码提高用户留存的方法

    如今,各大教育平台都会看到知识付费的影子,由此可见,其理念是有多么的深入人心。软件开发商也顺应发展趋势,利用知识付费系统源码对其系统进行搭建,试图搭建出完整的知识付费系统。但是在搭建过程中,遇到了不少的困难,如何提高用户留存就是其中一个。知识付费系统源码如…...

    2024/5/7 1:05:27
  7. Oracle 数据库 查询某一个值为null执行其他sql 或使用其他字段代替

    今天有一个需求是从库里查询出一个值,如果有则使用,如果为null 则使用其他表的一个字段的值; 特此记录: 例子: 取出 user1 表 id 为1 的数据, 如果数据 为null 则取出 user2 表 id 为1的数据 方法1: SELECT(CASE WHEN name is null THEN name ELSE (select name from user2 w…...

    2024/4/19 16:26:42
  8. Twitter引导程序中的五个相等的列

    本文翻译自:Five equal columns in twitter bootstrap I want to have 5 equal columns on a page I am building and I cant seem to understand how the 5 column grid is being used here: http://web.archive.org/web/20120416024539/http://domain7.com/mobile/tools/boo…...

    2024/4/15 4:54:32
  9. Mac 为啥不显示图片尺寸,点了显示简介也不显示??修复Mac点击图片的显示简介,图片尺寸消失问题

    问题描述:mac不显示图片分辨率 文件属性更多信息里少了很多东西 同时spotlight可能搜索不到文件网上80%的解决方法如下:在 Finder 中,按快捷键 command+J 或者点击屏幕顶部的系统导航菜单——显示——查看显示选项; 选中“显示项目简介”前的复选框;如果已正常显示,忽略以…...

    2024/5/7 4:04:00
  10. linux netfilter

    知乎地址:https://zhuanlan.zhihu.com/p/81866818...

    2024/4/15 4:54:30
  11. MongoDB结构文档多层次查询及更新

    本文记录Spring Data Mongodb中对mongoDB查询及更新的实现.使用场景 mongoDB中文档会具有较深的深度,在通过mongoTemplate进行处理时,需要注意使用的语法.本文介绍两种场景:深层次查询及更新 技术点mongoDB语法 mongoTemplate接口APImongoDB文档展示 {"_id" : Object…...

    2024/5/6 23:00:29
  12. Asp.Net Core应用部署心得

    应用为Asp.Net Core WebApi 应用,开发机为win10 x64,生产部署机为win7 x86同时部署SQL server 2012。期间遇到很多坑,所幸最终都一一解决,现将部分问题解决方式汇总如下,方便后人。1、运行环境搭建:添加IIS组件,安装dotnet-hosting 组件,.net core runtime运行时,以及…...

    2024/4/19 9:25:48
  13. 币汐柔:6.8比特币晚间行情分析和操作建议

    今日凌晨三点,比特币迎来一波大回调,行情上涨拉伸至最高点9812.5,随后日内主要在区间9680-9780震荡,行情并未有较大波动。汐柔老师利用小幅度的震荡,抓住机会,成功止盈两单。从四小时上看昨日触及9400后反弹,价位不但重新回到上升趋势线上方,目前行情运行于布林带中轨上…...

    2024/5/7 3:02:49
  14. 实验6.2 定义一个基类BaseClass,观察构造函数和析构函数的执行情况。

    题目 定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 AC的C++代码如下: #include<iostream> using namespace std;class BaseClass { public:BaseClass(){cout<<"构造了BaseClass类的对象&quo…...

    2024/4/18 5:56:00
  15. git 删除本地修改/新增文件

    git 删除本地修改/新增文件 场景: 忘记在.gitignore文件中添加 node_modules文件,于是开发过程中npm install 时产生了一堆跟踪变更文件,这个时候我想删除本地新增及修改的一堆node_modules里的东西,总不能手动处理吧,于是搜到两个特别好使的f方法:git checkout . 此命令…...

    2024/5/6 19:12:15
  16. System

    System的常用方法方法名 说明public static void exit(int status) 终止当前运行的Java虚拟机,非零表示异常终止public static long currentTimeMillis() 返回当前时间(以毫秒为单位) System.exit(int status) 终止当前运行的虚拟机,该参数作为状态码,非零状态表示异常终…...

    2024/4/24 11:51:29
  17. C语言程序设计之RLE压缩解压算法

    先介绍一下RLE压缩算法: 游程编码(Run-Length Encoding, RLE)又称行程长度编码或者变动长度编码法,在控制理论中对于二值图像而言是一种编码方法,对连续的黑,白向像素以不同的码字进行编码。游程编码是一种简单的无损压缩方法,其特点是压缩和解压缩都非常快。该方法是用…...

    2024/4/24 11:51:25
  18. java实现单一登录,重复登录,用户登录后再次登录相同用户,会踢掉第一次登录用户(类似QQ登录)

    java实现单一登录(类似QQ登录)一、业务需求二、具体实现实现思路具体代码 一、业务需求 账号已在web端登录后,再次登录相同账号将踢掉前一次的登录信息。 二、具体实现 实现思路 1.通过定义一个全局map变量sessionMap来保存用户登录成功时session对象,key为userId,value为H…...

    2024/4/28 9:28:44
  19. Linux交换区swap

    转载...

    2024/4/24 11:51:28
  20. 1051 Pop Sequence (25分)[栈]

    By Jalan 文章目录**By Jalan**知识工具需求数学数据结构和算法语言题干输入条件输出条件题解第一次思路预期时间复杂度编写用时代码CPP运行用时结尾 知识工具需求 数学 数据结构和算法栈语言#include<stack>其实不用这个也行,毕竟栈很好写.题干 模拟一个栈,设栈元素最多…...

    2024/4/24 11:51:20

最新文章

  1. ACPWorkbench_for_BP10

    一、菜单 文件菜单包含导入导出所有参数&#xff0c;导出flashbin文件和退出操作。文件菜单显示如下&#xff1a; Import Audio Settings&#xff1a;从音频配置文件中导入音频参数。 Export Audio Settings&#xff1a;将音频设置导出为音频配置文件。 Export Flash Binary Fi…...

    2024/5/7 12:13:45
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. yolov9直接调用zed相机实现三维测距(python)

    yolov9直接调用zed相机实现三维测距&#xff08;python&#xff09; 1. 相关配置2. 相关代码2.1 相机设置2.2 测距模块2.2 实验结果 相关链接 此项目直接调用zed相机实现三维测距&#xff0c;无需标定&#xff0c;相关内容如下&#xff1a; 1. yolov4直接调用zed相机实现三维测…...

    2024/5/7 4:57:37
  4. 【讲解下Docker in Docker的原理与实践】

    &#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…...

    2024/5/5 8:20:54
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57