using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
///
/// 我的自定义Button,继承 Button
///
public class LongPressButton : Button
{
// 构造函数
protected LongPressButton()
{
my_onLongPress = new ButtonClickedEvent();
my_onLongPress_Up = new ButtonClickedEvent();
}
// 长按
public ButtonClickedEvent my_onLongPress;
// 长按抬起
public ButtonClickedEvent my_onLongPress_Up;
public ButtonClickedEvent OnLongPress
{
get { return my_onLongPress; }
set { my_onLongPress = value; }
}
public ButtonClickedEvent OnLongPress_Up
{
get { return my_onLongPress_Up; }
set { my_onLongPress_Up = value; }
}
// 长按需要的变量参数
private bool my_isStartPress = false;
private float my_curPointDownTime = 0f;
private float my_longPressTime = 0f;
private bool my_longPressTrigger = false;
void Update()
{
CheckIsLongPress();
}
#region 长按
///
/// 处理长按
///
void CheckIsLongPress()
{
if (my_isStartPress && !my_longPressTrigger)
{
if (Time.time > my_curPointDownTime + my_longPressTime)
{
my_longPressTrigger = true;
my_isStartPress = false;
if (my_onLongPress != null)
{
my_onLongPress.Invoke();
}
}
}
}
public override void OnPointerDown(PointerEventData eventData)
{
// 按下刷新當前時間
base.OnPointerDown(eventData);
my_curPointDownTime = Time.time;
my_isStartPress = true;
my_longPressTrigger = false;
}
public override void OnPointerUp(PointerEventData eventData)
{
// 指針擡起,結束開始長按
base.OnPointerUp(eventData);
my_isStartPress = false;
if (my_longPressTrigger)
{
if (my_onLongPress_Up != null)
{
my_onLongPress_Up.Invoke();
}
my_longPressTrigger = !my_longPressTrigger;
}
}
public override void OnPointerExit(PointerEventData eventData)
{
// 指針移出,結束開始長按,計時長按標志
base.OnPointerExit(eventData);
my_isStartPress = false;
}
#endregion
}