- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UUnniittyy 中中的的SSccrroollllRReecctt滑滑动动结结束束后后 ,,⾃⾃动动将将最最靠靠近近中中间间的的元元素素居居中中
思思路路
停⽌滑动 (OnEndDrag)时,调整Content的localPosX :使其逐渐变为与其最接近的若⼲的标准PosX中的那个。
说说明明
当前只⽀持横向滑动。
2种模式:
1. 根据停⽌滑动时是左滑还是右滑来决定⾃动滑动⽅向
2. 当前哪个元素最靠近中央,就将该元素的位置归到中央
⽤⽤法法
将UIScrollRectAdj ustor挂 ScrollRect 同级节点上。
可配置
1. ⾃动移动时的移动速度
2. 使⽤哪种模式寻找标准PosX。
具具体体实实现现
UIScrollRectAdj ustor.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine ;
using UnityEngine.UI;
using UnityEngine.EventSystems;
[RequireComponent(typeof(ScrollRect))]
pu lic class UIScrollRectAdj ustor : MonoBehaviour, IEnd DragHandler, IBeginDragHandler
{
private ScrollRect _scrollRect;
private RectTransform _contentRectTrans;
private float _ minX ;
private float _ aseX ;
private float _xOffset;
[SerializeField ,Header( ⾃动移动时的移动速度)]
private float _ moveSpeed = 3000 ;
private IEnumerator _ autoMoveCoroutine ;
[SerializeField , Header(⽅向优先)]
private ool _shouldBaseOnMoveDir;
private void Start()
{
Init();
}
private void OnDestroy()
{
Destroy();
}
pu lic void Init()
{
_ minX = 0 ;
_ minX = 0 ;
_scrollRect = GetComponentScrollRect();
_contentRectTrans = _scrollRect.content;
var gridLayoutGroup = _contentRectTrans.GetComponentGridLayoutGroup();
_ aseX = gridLayoutGroup.cellSize.x / 2 + gridLayoutGroup.padding.left;
_xOffset = gridLayoutGroup.cellSize.x + gridLayoutGroup.spacing.x ;
}
pu lic void Destroy()
{
StopAutoMove();
_scrollRect = null;
_contentRectTrans = null;
}
pu lic void OnBeginDrag(PointerEventData eventData)
{
if (_ minX == 0)
{
var gridLayoutGroup = _contentRectTrans.GetComponentGridLayoutGroup();
_
文档评论(0)