查看: 2390|回复: 4
打印 上一主题 下一主题

[GUI] NGUI中的scrollview使用心得

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-10-31 23:43:26 |只看该作者 |倒序浏览
在使用NGUI的Scroll View的时候,碰到Scroll Item太多的话(超过100个),在滑动的过程中就会明显掉帧。究其原因就是NGUI每帧会对所有的Scroll Item进行更新,无论它是否显示。

NGUI 3.5.5加入了UIWrapContent,它会将不显示的Scroll Item设为disabled,这样就使得每帧更新的Scroll Item减少到当前显示的那几个,就再也不会出现掉帧的情况了。


不过UIWrapContent只能创建循环的Scroll View,不过只需要简单的几处修改,就能实现在普通的Scroll View上。


  • 复制一份UIWrapContent.cs,重命名为UIBetterGrid.cs,修改类名

    // line: 19 - 20, file: UIWrapContent.cs[AddComponentMenu("NGUI/Interaction/Wrap Content")]public class UIWrapContent : MonoBehaviour

    修改后的代码如下:

    // line: 19 - 20, file: UIBetterGrid.cs[AddComponentMenu("NGUI/Interaction/Better Grid")]public class UIBetterGrid : MonoBehaviour

  • 修改初始化代码

    // line: 52 - 54, file: UIWrapContent.csmScroll.restrictWithinPanel = false;if (mScroll.dragEffect == UIScrollView.DragEffect.MomentumAndSpring)mScroll.dragEffect = UIScrollView.DragEffect.Momentum;

    修改后的代码如下:

    // line: 52 - 54, file: UIBetterGrid.csmScroll.restrictWithinPanel = true;//if (mScroll.dragEffect == UIScrollView.DragEffect.MomentumAndSpring)//mScroll.dragEffect = UIScrollView.DragEffect.Momentum;

  • 注释创建首尾循环的代码

    // line 159 - 170, file: UIBetterGrid.cs //if (distance < -extents)//{//        t.localPosition += new Vector3(extents * 2f, 0f, 0f);//        distance = t.localPosition.x - center.x;//        UpdateItem(t, i);//}//else if (distance > extents)//{//        t.localPosition -= new Vector3(extents * 2f, 0f, 0f);//        distance = t.localPosition.x - center.x;//        UpdateItem(t, i);//}        // line 190 - 201, file: UIBetterGrid.cs//if (distance < -extents)//{//        t.localPosition += new Vector3(0f, extents * 2f, 0f);//        distance = t.localPosition.y - center.y;//        UpdateItem(t, i);//}//else if (distance > extents)//{//        t.localPosition -= new Vector3(0f, extents * 2f, 0f);//        distance = t.localPosition.y - center.y;//        UpdateItem(t, i);//}

  • 修改UIScrollView.cs

    // line 173, file: UIWrapContent.csmBounds = NGUIMath.CalculateRelativeWidgetBounds(mTrans, mTrans);  

    修改后的代码如下:

    // line 173, file: UIBetterGrid.cs                mBounds = NGUIMath.CalculateRelativeWidgetBounds(mTrans, mTrans,true);  

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-11-1 14:15:27 |只看该作者
Thanks For Sharing!!!
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-11-3 03:50:15 |只看该作者
Great share !
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-11-6 14:22:30 |只看该作者
不错的教学,多谢分享!
回复

使用道具 举报

0

主题

1

听众

30

积分

设计初学者

Rank: 1

纳金币
6
精华
0
5#
发表于 2014-12-25 23:25:58 |只看该作者
我觉得把Scrollview不显示的隐藏掉比较合理吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-1-11 20:39 , Processed in 0.062129 second(s), 35 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部