滑块释放时的函数调用?
Function call on slider release?
我使用滑块将历史数据加载到我的可视化应用程序中。滑块表示相对于现在的时间段。所以你可以及时向后滑动,它会加载数据。
但是,目前,只要滑块的值发生变化,数据就会加载,这意味着我是否想查看 5 小时前?我必须加载介于两者之间的所有内容...
我使用的代码如下:
history = LoadData.Historical();
data = GameObject.Find("DataManager").GetComponent<LoadData>();
slider.maxValue = history.Length - 1;
slider.value = slider.maxValue;
slider.onValueChanged.AddListener(delegate { ValueChange(); });
其中 ValueChange() 包含如下内容:
LoadData.Candles(data.bounds, history[(int)slider.value]);
有没有一种方法可以让我只在值已更改并且没有按住滑块时加载数据?
注:我试过用协程的方式来实现,结果都是泪流满面,死循环。 :/
编辑:
我起草了这个解决方案,但似乎 OnMouseUp 不能直接在滑块上工作...有什么想法吗?
void Start()
{
slider = gameObject.GetComponent<Slider>();
history = LoadData.Historical();
data = GameObject.Find("DataManager").GetComponent<LoadData>();
slider.maxValue = history.Length - 1;
slider.value = slider.maxValue;
slider.onValueChanged.AddListener(delegate { ValueChange(); });
LoadData.Candles(data.bounds, history[(int)slider.maxValue]);
valueChanged = false;
}
void OnMouseUp()
{
Debug.Log("UP");
if (valueChanged)
{
LoadData.DestroyCandles();
LoadData.Candles(data.bounds, history[(int)slider.value]);
}
valueChanged = false;
}
void ValueChange()
{
valueChanged = true;
Debug.Log(valueChanged);
}
编辑 2:
您可以使用事件系统来捕获如下所示的 MouseUp 事件。它应该可以解决问题,但是您需要自己考虑值是否发生了变化(只需存储旧值并检查它是否不相等)
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class SliderOnPointerUpExample : MonoBehaviour, IPointerUpHandler {
Slider slider;
float oldValue;
void Start() {
slider = GetComponent<Slider>();
oldValue = slider.value;
}
public void OnPointerUp(PointerEventData eventData) {
if(slider.value != oldValue) {
Debug.Log("Slider value changed from " + oldValue + " to " + slider.value);
oldValue = slider.value;
}
}
}
idk 如果它是最好的解决方案,那么也是一个解决方案(但可能也不是最差的):D
我使用滑块将历史数据加载到我的可视化应用程序中。滑块表示相对于现在的时间段。所以你可以及时向后滑动,它会加载数据。
但是,目前,只要滑块的值发生变化,数据就会加载,这意味着我是否想查看 5 小时前?我必须加载介于两者之间的所有内容...
我使用的代码如下:
history = LoadData.Historical();
data = GameObject.Find("DataManager").GetComponent<LoadData>();
slider.maxValue = history.Length - 1;
slider.value = slider.maxValue;
slider.onValueChanged.AddListener(delegate { ValueChange(); });
其中 ValueChange() 包含如下内容:
LoadData.Candles(data.bounds, history[(int)slider.value]);
有没有一种方法可以让我只在值已更改并且没有按住滑块时加载数据?
注:我试过用协程的方式来实现,结果都是泪流满面,死循环。 :/
编辑:
我起草了这个解决方案,但似乎 OnMouseUp 不能直接在滑块上工作...有什么想法吗?
void Start()
{
slider = gameObject.GetComponent<Slider>();
history = LoadData.Historical();
data = GameObject.Find("DataManager").GetComponent<LoadData>();
slider.maxValue = history.Length - 1;
slider.value = slider.maxValue;
slider.onValueChanged.AddListener(delegate { ValueChange(); });
LoadData.Candles(data.bounds, history[(int)slider.maxValue]);
valueChanged = false;
}
void OnMouseUp()
{
Debug.Log("UP");
if (valueChanged)
{
LoadData.DestroyCandles();
LoadData.Candles(data.bounds, history[(int)slider.value]);
}
valueChanged = false;
}
void ValueChange()
{
valueChanged = true;
Debug.Log(valueChanged);
}
编辑 2:
您可以使用事件系统来捕获如下所示的 MouseUp 事件。它应该可以解决问题,但是您需要自己考虑值是否发生了变化(只需存储旧值并检查它是否不相等)
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class SliderOnPointerUpExample : MonoBehaviour, IPointerUpHandler {
Slider slider;
float oldValue;
void Start() {
slider = GetComponent<Slider>();
oldValue = slider.value;
}
public void OnPointerUp(PointerEventData eventData) {
if(slider.value != oldValue) {
Debug.Log("Slider value changed from " + oldValue + " to " + slider.value);
oldValue = slider.value;
}
}
}
idk 如果它是最好的解决方案,那么也是一个解决方案(但可能也不是最差的):D