public class ScrollPage : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
private ScrollRect scrollRect;
private float[] pageArray;
public Toggle[] ToggleArray;
public float speed;
private float targetHorizontalPosition;
private float m_fTrigerOffset; // 滑动触发翻页的偏移量;
private float m_fDragStartPosX; // 开始滑动的初始X轴位置;
private int m_nIndex; // 当前页序号;
private bool isDraging;
public Action<int> m_PageChangeCallBack;
private void Awake()
{
speed = 5f;
targetHorizontalPosition = 0f;
m_fDragStartPosX = 0; // 开始滑动的初始X轴位置;
m_nIndex = 0; // 当前页序号;
isDraging = false;
scrollRect = transform.GetComponent<ScrollRect>();
m_fTrigerOffset = transform.GetComponent<RectTransform>().sizeDelta.x * 0.22f;
}
private void Start()
{
pageArray = new float[ToggleArray.Length];
for (int i = 0; i < pageArray.Length; i++)
{
pageArray[i] = (float)i / (pageArray.Length - 1);
}
for (int i = 0; i < ToggleArray.Length; i++)
{
int nIndex = i;
ToggleArray[i].isOn = i == 0;
ToggleArray[i].onValueChanged.AddListener((bool isChange) =>
{
if (isChange)
{
OnClickToggle(nIndex);
}
});
}
}
void Update()
{
if (!isDraging)
{
scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition, targetHorizontalPosition, Time.deltaTime * speed);
}
}
public void OnBeginDrag(PointerEventData eventData)
{
isDraging = true;
m_fDragStartPosX = eventData.position.x;
}
public void OnEndDrag(PointerEventData eventData)
{
isDraging = false;
int nIndex = m_nIndex;
float fXOffset = eventData.position.x - m_fDragStartPosX;
if (fXOffset > m_fTrigerOffset && nIndex > 0)
{
nIndex--;
}
else if (fXOffset < -m_fTrigerOffset && nIndex < pageArray.Length - 1)
{
nIndex++;
}
for (int i = 0; i < ToggleArray.Length; i++)
{
ToggleArray[i].isOn = i == nIndex;
}
}
void OnClickToggle(int nIndex)
{
targetHorizontalPosition = pageArray[nIndex];
for (int i = 0; i < ToggleArray.Length; i++)
{
ToggleArray[i].isOn = i == nIndex;
}
m_nIndex = nIndex;
if(m_PageChangeCallBack != null)
{
m_PageChangeCallBack(m_nIndex);
}
}
}
untiy ugui 翻页效果的scroll
最新推荐文章于 2023-02-14 17:23:26 发布