fairygui制作ui界面

谷主 回复了问题 • 1 人关注 • 1 个回复 • 241 次浏览 • 2021-01-13 15:28 • 来自相关话题

求教一个单选列表的问题

谷主 回复了问题 • 2 人关注 • 1 个回复 • 186 次浏览 • 2021-01-13 15:28 • 来自相关话题

如何控制滑动的最小有效偏移值?

froznh 回复了问题 • 2 人关注 • 2 个回复 • 156 次浏览 • 2021-01-11 20:20 • 来自相关话题

位图字体显示问题

shaoye123 回复了问题 • 2 人关注 • 4 个回复 • 226 次浏览 • 2021-01-11 18:15 • 来自相关话题

fairygui素材在哪里下载

谷主 回复了问题 • 3 人关注 • 2 个回复 • 870 次浏览 • 2021-01-11 16:57 • 来自相关话题

分页滚动控制问题

谷主 回复了问题 • 2 人关注 • 2 个回复 • 150 次浏览 • 2021-01-09 20:12 • 来自相关话题

GList列表添加拉到底会自动消失的向下箭头功能小记

zycpig22 发表了文章 • 6 个评论 • 321 次浏览 • 2021-01-09 15:03 • 来自相关话题

前言:Fairgui是一个很好用的UI工具,但是他跟其他UI一样,事件的通知都有很大的缺失,都仅仅提供一些常用的。
非游戏的ui框架,对于ui的变化都会通知到编写者,比如一个列表,item大小发生变化会通知,item被点击会通知,发生滚动会通知,显示区域item发生变化会通知,滚到低会通知等等。
显然,fairgui里面发生的很多变化,编写者根本不知道,除非你update里面每秒去检测他,而且还缺乏判断标准,例如,GList添加拉到底会自动消失的向下箭头,仅仅使用fairgui的东西,如何判断列表滚到底了?
正文:
我思考了片刻,决定利用虚拟列表不会把item全部显示出来的特性,是不是说当index+1==numItems的时候,就代表list滚到底,或者接近滚到底了?
于是我开始尝试。(测试列表是一个N行1列的传统排行榜形式的列表)
第一次尝试:
itemRenderer里直接判断当index+1==numItems的时候隐藏箭头,否则显示箭头(因为item的显示肯定是有序的,默认从小到大)
然后发现失败,拉到底再往上拉的时候,再次显示箭头有较大延迟,因为glist会准备几个item,所以最下面的几个item虽然离开显示区域了,但是并没有隐藏,还是显示着。
第二次尝试:
numItems=numItems+1,多显示一个(流动表格就+列数);然后
itemRenderer里当index+1<=numItems,显示箭头,并把item设置为设定大小(可以一开始保存下),alpha=1,enabled=true;否则,隐藏箭头,并把item设置为设定宽度(可以一开始保存下),高度为1,alpha=0.01,enabled=false;
后来发现偶尔会对某些排版关联方式有一定影响,而且移植到流动形式的表格上,会有错乱的情况。失败。
第三次尝试:
numItems=numItems+1,多显示一个;并且创建一个高度为1的空白组件。利用itemProvider,并不改变item大小,而是把多出来的item指定为高度为1的空白组件。---@return string
function SelfServerRankWindow.CountryPowerItemProvider(index)
local tableLength = 0
for k, v in pairs(serviceTool.GetCountryPowerData().infos) do
tableLength = tableLength + 1
end

if index+1 >tableLength then
return EmptyItem
end

return countryPowerItem
end上面是lua的代码,差不多就是这形式。
然后itemRenderer里当index+1<=numItems,显示箭头,否则隐藏。
这个方式我一度认为是正确可用的,发现就发现了问题,上下正常拉动都是正常的,但是当我把list拉到底,箭头消式以后,我再拉上去一点点拉到箭头显示,然后立马拉到底,箭头没消失!
观察发现,当时我list拉到底再拉上去一点点到箭头显示,再往下拉的过程,gameobject的表示只是有一个item被隐藏了,但是没有item从隐藏变成显示,itemRenderer完全就没触发,我根本就不知道!再次失败。
第四次尝试:
在第三次尝试的基础上,我已经无计可施,只能动源码了,GList里面加一个共有字段,并且默认为false,以免你的改动影响到其他人。/// <summary>
/// 如果true,则滚动List的时候会强制刷新所有item,慎用
/// </summary>
public bool openScrollFroceUpdate = false;然后修改GList里面void __scrolled(EventContext context)这个方法。改成:void __scrolled(EventContext context)
{
HandleScroll(openScrollFroceUpdate );
}目前来说,效果都很正常,如果发现问题,那么我会来个第五次尝试。
改源码的缺点就是,fairgui的版本要稳定一个版本,不然一升级可能就没了。
------------------------------------------------------------------------------
发现了缺点,性能上有点缺失,特别是动态装配扩容,大小不一并且特别复杂的item,比如用到
EnsureBoundsCorrect()进行扩展的item,它....有点卡。
我的方法暂时是优化下item,不要做非必要的工作。
-------------------------------------------------------------------------------
第五次尝试:
想办法解决性能问题,去掉第四次的代码,或者将openScrollFroceUpdate设置为false
在GList中加上一行/// <summary>
/// 如果true,则List最后一个item总是会被刷新,慎用
/// </summary>
public bool endItemAlwaysUpdate = false;在bool HandleScroll1(bool forceUpdate),bool HandleScroll2(bool forceUpdate)的if (needRender)上面加上else if(curIndex+1 == _realNumItems && endItemAlwaysUpdate)
needRender = true;





------------------------------------------
第四种不适合复杂List,很卡,但是恢复很及时。
第五种恢复的时候有点延时,但不影响性能。
--------------------------------------------------
第六次尝试:
经过版主的提示教育,确实发现走了远路。
GList使用的是GComponent里面的scorllpanel,用这个判断percY==1确实可行。
 
再次补充
版主的方法有缺陷,当list里面元素过少不会触发滚动的时候,percY始终是0
需要在判断contentHeight是否为0,为0代表未达到滚动条件的情况。
或者我在api文档里面找到一个isBottomMost的属性,好像也可以。
就认为滚到底无法检测这件事情来说,确实是我不够熟悉造成的。 查看全部
前言:Fairgui是一个很好用的UI工具,但是他跟其他UI一样,事件的通知都有很大的缺失,都仅仅提供一些常用的。
非游戏的ui框架,对于ui的变化都会通知到编写者,比如一个列表,item大小发生变化会通知,item被点击会通知,发生滚动会通知,显示区域item发生变化会通知,滚到低会通知等等。
显然,fairgui里面发生的很多变化,编写者根本不知道,除非你update里面每秒去检测他,而且还缺乏判断标准,例如,GList添加拉到底会自动消失的向下箭头,仅仅使用fairgui的东西,如何判断列表滚到底了?
正文:
我思考了片刻,决定利用虚拟列表不会把item全部显示出来的特性,是不是说当index+1==numItems的时候,就代表list滚到底,或者接近滚到底了?
于是我开始尝试。(测试列表是一个N行1列的传统排行榜形式的列表)
第一次尝试:
itemRenderer里直接判断当index+1==numItems的时候隐藏箭头,否则显示箭头(因为item的显示肯定是有序的,默认从小到大)
然后发现失败,拉到底再往上拉的时候,再次显示箭头有较大延迟,因为glist会准备几个item,所以最下面的几个item虽然离开显示区域了,但是并没有隐藏,还是显示着。
第二次尝试:
numItems=numItems+1,多显示一个(流动表格就+列数);然后
itemRenderer里当index+1<=numItems,显示箭头,并把item设置为设定大小(可以一开始保存下),alpha=1,enabled=true;否则,隐藏箭头,并把item设置为设定宽度(可以一开始保存下),高度为1,alpha=0.01,enabled=false;
后来发现偶尔会对某些排版关联方式有一定影响,而且移植到流动形式的表格上,会有错乱的情况。失败。
第三次尝试:
numItems=numItems+1,多显示一个;并且创建一个高度为1的空白组件。利用itemProvider,并不改变item大小,而是把多出来的item指定为高度为1的空白组件。
---@return string
function SelfServerRankWindow.CountryPowerItemProvider(index)
local tableLength = 0
for k, v in pairs(serviceTool.GetCountryPowerData().infos) do
tableLength = tableLength + 1
end

if index+1 >tableLength then
return EmptyItem
end

return countryPowerItem
end
上面是lua的代码,差不多就是这形式。
然后itemRenderer里当index+1<=numItems,显示箭头,否则隐藏。
这个方式我一度认为是正确可用的,发现就发现了问题,上下正常拉动都是正常的,但是当我把list拉到底,箭头消式以后,我再拉上去一点点拉到箭头显示,然后立马拉到底,箭头没消失!
观察发现,当时我list拉到底再拉上去一点点到箭头显示,再往下拉的过程,gameobject的表示只是有一个item被隐藏了,但是没有item从隐藏变成显示,itemRenderer完全就没触发,我根本就不知道!再次失败。
第四次尝试:
在第三次尝试的基础上,我已经无计可施,只能动源码了,GList里面加一个共有字段,并且默认为false,以免你的改动影响到其他人。
/// <summary>
/// 如果true,则滚动List的时候会强制刷新所有item,慎用
/// </summary>
public bool openScrollFroceUpdate = false;
然后修改GList里面void __scrolled(EventContext context)这个方法。改成:
void __scrolled(EventContext context)
{
HandleScroll(openScrollFroceUpdate );
}
目前来说,效果都很正常,如果发现问题,那么我会来个第五次尝试。
改源码的缺点就是,fairgui的版本要稳定一个版本,不然一升级可能就没了。
------------------------------------------------------------------------------
发现了缺点,性能上有点缺失,特别是动态装配扩容,大小不一并且特别复杂的item,比如用到
EnsureBoundsCorrect()进行扩展的item,它....有点卡。
我的方法暂时是优化下item,不要做非必要的工作。
-------------------------------------------------------------------------------
第五次尝试:
想办法解决性能问题,去掉第四次的代码,或者将openScrollFroceUpdate设置为false
在GList中加上一行
/// <summary>
/// 如果true,则List最后一个item总是会被刷新,慎用
/// </summary>
public bool endItemAlwaysUpdate = false;
在bool HandleScroll1(bool forceUpdate),bool HandleScroll2(bool forceUpdate)的if (needRender)上面加上
else if(curIndex+1 == _realNumItems && endItemAlwaysUpdate)
needRender = true;

f1.png


------------------------------------------
第四种不适合复杂List,很卡,但是恢复很及时。
第五种恢复的时候有点延时,但不影响性能。
--------------------------------------------------
第六次尝试:
经过版主的提示教育,确实发现走了远路。
GList使用的是GComponent里面的scorllpanel,用这个判断percY==1确实可行。
 
再次补充
版主的方法有缺陷,当list里面元素过少不会触发滚动的时候,percY始终是0
需要在判断contentHeight是否为0,为0代表未达到滚动条件的情况。
或者我在api文档里面找到一个isBottomMost的属性,好像也可以。
就认为滚到底无法检测这件事情来说,确实是我不够熟悉造成的。

请问怎么在代码里面使用 Tween

谷主 回复了问题 • 2 人关注 • 1 个回复 • 182 次浏览 • 2021-01-08 19:59 • 来自相关话题

求助, Container的获取方法

谷主 回复了问题 • 2 人关注 • 1 个回复 • 129 次浏览 • 2021-01-08 19:59 • 来自相关话题

Button.onClick 如何add 有参数事件

谷主 回复了问题 • 2 人关注 • 1 个回复 • 156 次浏览 • 2021-01-08 19:59 • 来自相关话题

按钮播放动效 bug

谷主 回复了问题 • 2 人关注 • 1 个回复 • 125 次浏览 • 2021-01-08 19:58 • 来自相关话题

关于在Glist中模型的显示问题

谷主 回复了问题 • 2 人关注 • 1 个回复 • 134 次浏览 • 2021-01-08 18:18 • 来自相关话题

2020的FairyGui在unity加载spine动画用普通的就行还是需要用3D装载器

谷主 回复了问题 • 3 人关注 • 2 个回复 • 282 次浏览 • 2021-01-08 09:36 • 来自相关话题

列表渲染元素需要从大界面分离

杨仪 回复了问题 • 2 人关注 • 1 个回复 • 138 次浏览 • 2021-01-07 10:26 • 来自相关话题

插件:自定义快捷键

谷主 回复了问题 • 2 人关注 • 1 个回复 • 192 次浏览 • 2021-01-07 00:09 • 来自相关话题

老版本升级Fairgui到2020.3.1 资源导入unity2018部分图片不显示

谷主 回复了问题 • 2 人关注 • 1 个回复 • 145 次浏览 • 2021-01-07 00:09 • 来自相关话题

如何通过代码动态控制列表的行数列数

杨仪 回复了问题 • 2 人关注 • 1 个回复 • 232 次浏览 • 2021-01-06 17:22 • 来自相关话题

动效可否和关联一起使用

杨仪 回复了问题 • 2 人关注 • 1 个回复 • 131 次浏览 • 2021-01-06 17:16 • 来自相关话题

一个高级组内的元件是否可以一起旋转

回复

Cartron康 回复了问题 • 0 人关注 • 1 个回复 • 207 次浏览 • 2021-01-05 16:21 • 来自相关话题

多个输入文本的时候,前面的后面文本显示的内容会跟着前面输入文本光标一起闪烁

谷主 回复了问题 • 2 人关注 • 3 个回复 • 193 次浏览 • 2021-01-04 20:04 • 来自相关话题