• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

常州微信小程序开发-u3d WrapContent与ScrollBar

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0125/358.html

常州微信小程序开发-NGUI WrapContentScrollBar一起使用

 

今天主要给大家介绍下UIScrollView+UIWrapContent+UIScrollBar的使用。

 

一般在做滑动展示时,我们都会加个滚动条,NGUI也提供了ScrollView这个组件,但是为了优化我们经常会使用UIWrapContent来重复使用Item,可是NGUI现有的UIScrollBar的计算方式不支持,这就要我们常州App开发培训自己实现个计算方式去计算滚动条,

 

using UnityEngine;

using System.Collections;

public class MyBar : MonoBehaviour

    public UIScrollView ScrollView;

    public UIWrapContent WrapContent;

    public UIPanel ScrollViewPanel;

    public UIScrollBar ScrollBar;

    public int ItemNum = 60;

    public int RowNum = 1;

    private Vector3 mStartLocalPos;

    private float mScrollLegth;

    void Start()

   

        ScrollView.onMomentumMove += UpdateScrollbar;

        mStartLocalPos = ScrollView.transform.localPosition;

        mScrollLegth = WrapContent.itemSize*Mathf.CeilToInt(ItemNum/(float) RowNum);

        Debug.LogError(ItemNum / (float)RowNum);

        Debug.LogError(mScrollLegth);

        ScrollBar.barSize = ScrollViewPanel.GetViewSize().y/mScrollLegth;

        if (null != ScrollBar.backgroundWidget)

       

            UIEventListener bgl = UIEventListener.Get(ScrollBar.backgroundWidget.gameObject);

            if (null != bgl)

           

                bgl.onPress += OnScrollBarPressed;

                //bgl.onDrag += OnScrollBarDragged;

           

            UIEventListener fgl = UIEventListener.Get(ScrollBar.foregroundWidget.gameObject);

            if (null != fgl)

           

                fgl.onDrag += OnScrollBarDragged;

           

       

   

    void UpdateScrollbar()

   

        float pct = 0.0f;

        float endPos = 0.0f;

        if (ScrollView.movement == UIScrollView.Movement.Horizontal)

       

            endPos = (mScrollLegth - ScrollViewPanel.GetViewSize().x) -

                     Mathf.Abs(mStartLocalPos.x);

            pct = Mathf.Clamp((ScrollView.transform.localPosition.x - mStartLocalPos.x) / (mStartLocalPos.x - endPos), 0,

                100f);

       

        else if (ScrollView.movement == UIScrollView.Movement.Vertical)

       

            endPos = (mScrollLegth - ScrollViewPanel.GetViewSize().y) + mStartLocalPos.y;

            pct = Mathf.Clamp((ScrollView.transform.localPosition.y - mStartLocalPos.y) / (endPos - mStartLocalPos.y), 0f,

                100f);

       

        ScrollBar.value = Mathf.Lerp(ScrollBar.value, pct, 0.1f);

   

    void OnScrollBarPressed(GameObject go, bool isPressed)

   

        if (!isPressed)

       

            OnScrollBarChange();

       

   

    void OnScrollBarDragged(GameObject go, Vector2 delta)

   

        OnScrollBarChange();

   

    void OnScrollBarChange()

   

        Vector3 newLocalPos = ScrollView.transform.localPosition;

        if (ScrollView.movement == UIScrollView.Movement.Vertical)

       

            newLocalPos.y = ScrollBar.value*

                            (mScrollLegth - ScrollViewPanel.GetViewSize().y) +

                            mStartLocalPos.y;

       

        else if (ScrollView.movement == UIScrollView.Movement.Horizontal)

       

            newLocalPos.x = ScrollBar.value*

                            (mScrollLegth - ScrollViewPanel.GetViewSize().x) +

                            mStartLocalPos.x;

       

        SpringPanel.Begin(ScrollView.panel.cachedGameObject, newLocalPos, 8).onFinished = OnSprinPanelFinished;

   

    void OnSprinPanelFinished()

   

        ScrollView.RestrictWithinBounds(false);

   



上篇:上一篇:常州手游开发-U3DUI WrapContent显示多行多列
下篇:下一篇:常州手机游戏-C++游戏服务器编程-LogServer