视频地址:https://www.bilibili.com/video/BV1nY4y1w7Vs?spm_id_from=333.337.search-card.all.click
/*
*┌────────────────────────────────┐
*│ 描 述:嵌套的滑动
*│ 类 名:NetedScrollView.cs
*│ 创 建 人:
*└────────────────────────────────┘
*/
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace D_Bug{
public class NetedScrollView : ScrollRect
{
private enum SlideDir
{
Horizontal,
Vertical
}
#region Variables
private NetedScrollView m_parentNetedScrollView;
private SlideDir m_currentSlideDir; //当前滑动方向
private SlideDir m_componentSlideDir; //当前组件的滑动方向
#endregion
protected override void Awake()
{
base.Awake();
m_parentNetedScrollView = transform.parent.GetComponentInParent<NetedScrollView>();
m_componentSlideDir = horizontal ? SlideDir.Horizontal : SlideDir.Vertical;
}
public override void OnBeginDrag(PointerEventData eventData)
{
if (m_parentNetedScrollView != null)
{
m_currentSlideDir = Mathf.Abs(eventData.delta.x)>=Mathf.Abs(eventData.delta.y) ? SlideDir.Horizontal : SlideDir.Vertical;
if(m_currentSlideDir != m_componentSlideDir)
{
ExecuteEvents.Execute(m_parentNetedScrollView.gameObject, eventData, ExecuteEvents.beginDragHandler);
return;
}
}
base.OnBeginDrag(eventData);
}
public override void OnDrag(PointerEventData eventData)
{
if (m_currentSlideDir != m_componentSlideDir && m_parentNetedScrollView!=null)
{
ExecuteEvents.Execute(m_parentNetedScrollView.gameObject, eventData, ExecuteEvents.dragHandler);
return;
}
base.OnDrag(eventData);
}
public override void OnEndDrag(PointerEventData eventData)
{
if (m_currentSlideDir != m_componentSlideDir && m_parentNetedScrollView != null)
{
ExecuteEvents.Execute(m_parentNetedScrollView.gameObject, eventData, ExecuteEvents.endDragHandler);
return;
}
base.OnEndDrag(eventData);
while
}
}
}