原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2019/0125/358.html
常州微信小程序开发-NGUI WrapContent与ScrollBar一起使用
今天主要给大家介绍下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