using System;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class UScrollRect : ScrollRect
{
public RectTransform rect;
/// <summary>
/// 高度 往下拉是负数 往上拉是正数
/// </summary>
float dropValue = -30f;
/// <summary>
/// 是否刷新
/// </summary>
bool isRefresh = false;
/// <summary>
/// 是否处于拖动
/// </summary>
bool isDrag = false;
/// <summary>
/// 显示、隐藏刷新字段
/// </summary>
public Action<bool> OnValue;
/// <summary>
/// 如果满足刷新条件 执行的方法
/// </summary>
public Action OnRefresh;
protected override void Awake()
{
base.Awake();
rect = GetComponentInChildren<ContentSizeFitter>().GetComponent<RectTransform>();
onValueChanged.AddListener(ScrollValueChanged);
}
/// <summary>
/// 当ScrollRect被拖动时
/// </summary>
/// <param name="vector">被拖动的距离与Content的大小比例</param>
void ScrollValueChanged(Vector2 vector)
{
//如果不拖动 当然不执行之下的代码
if (!isDrag)
{
return;
}
//如果拖动的距离大于给定的值
if (rect.anchoredPosition.y < dropValue)
{
isRefresh = true;
if (OnValue != null)
{
OnValue(isRefresh);
}
}
else
{
isRefresh = false;
if (OnValue != null)
{
OnValue(isRefresh);
}
}
}
public override void OnBeginDrag(PointerEventData eventData)
{
base.OnBeginDrag(eventData);
isDrag = true;
}
public override void OnEndDrag(PointerEventData eventData)
{
base.OnEndDrag(eventData);
OnValue(false);
if (isRefresh)
{
if (OnRefresh != null)
{
OnRefresh();
}
}
isRefresh = false;
isDrag = false;
}
}