我们开发中遇到了一个纵向列表的元素中,嵌套了一个横向列表,因此我添加了如下修改
public LoopScrollRect parentScorll;
public virtual void OnBeginDrag(PointerEventData eventData)
{
if (this.IgnoreDragEvent || eventData.button != PointerEventData.InputButton.Left)
return;
if (!IsActive())
return;
if (parentScorll)
{
if (Mathf.Abs(eventData.delta.x) - Mathf.Abs(eventData.delta.y) > triggerParentValue)
{
m_curDirection = Direction.Horizontal;
}
if (Mathf.Abs(eventData.delta.y) - Mathf.Abs(eventData.delta.x) > triggerParentValue)
{
m_curDirection = Direction.Vertical;
}
if (m_curDirection != direction)
{
//当前操作方向不等于滑动方向,将事件传给父对象
//当Parent是自己的时候会死循环StackOverflow
if (parentScorll.gameObject != this.gameObject)
{
ExecuteEvents.Execute(parentScorll.gameObject, eventData, ExecuteEvents.beginDragHandler);
}
return;
}
if (IgnoreMove)
{
//当Parent是自己的时候会死循环StackOverflow
if (parentScorll.gameObject != this.gameObject)
{
ExecuteEvents.Execute(parentScorll.gameObject, eventData, ExecuteEvents.beginDragHandler);
}
return;
}
}
//End
StopMovement();
UpdateBounds();
m_PointerStartLocalCursor = Vector2.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(viewRect, eventData.position,
eventData.pressEventCamera, out m_PointerStartLocalCursor);
m_ContentStartPosition = m_Content.anchoredPosition;
m_Dragging = true;
}
public virtual void OnEndDrag(PointerEventData eventData)
{
if (this.IgnoreDragEvent || eventData.button != PointerEventData.InputButton.Left)
return;
if (parentScorll)
{
if (parentScorll.m_Dragging)
{
if (parentScorll.gameObject != this.gameObject)
{
ExecuteEvents.Execute(parentScorll.gameObject, eventData, ExecuteEvents.endDragHandler);
m_Dragging = false;
return;
}
}
if (Mathf.Abs(eventData.delta.x) - Mathf.Abs(eventData.delta.y) > triggerParentValue)
{
m_curDirection = Direction.Horizontal;
}
if (Mathf.Abs(eventData.delta.y) - Mathf.Abs(eventData.delta.x) > triggerParentValue)
{
m_curDirection = Direction.Vertical;
}
if (m_curDirection != direction)
{
//当前操作方向不等于滑动方向,将事件传给父对象
//当Parent是自己的时候会死循环StackOverflow
if (parentScorll.gameObject != this.gameObject&&parentScorll.m_Dragging)
{
ExecuteEvents.Execute(parentScorll.gameObject, eventData, ExecuteEvents.endDragHandler);
m_Dragging = false;
return;
}
}
if (IgnoreMove)
{
//当Parent是自己的时候会死循环StackOverflow
if (parentScorll.gameObject != this.gameObject)
{
ExecuteEvents.Execute(parentScorll.gameObject, eventData, ExecuteEvents.endDragHandler);
}
return;
}
}
//End
m_Dragging = false;
if (vertical && verticalNormalizedPosition <= 0)
{
dataSource.OnEndTopDrag();
}
if (horizontal && horizontalNormalizedPosition <= 0)
{
dataSource.OnEndTopDrag();
}
OnEndDragEvent?.Invoke();
}
我们开发中遇到了一个纵向列表的元素中,嵌套了一个横向列表,因此我添加了如下修改