UGUI源码解析(十一)Slider

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq826364410/article/details/88139208

Slider

Slider继承了Selectable, IDragHandler, IInitializePotentialDragHandler, ICanvasElement。

Set方法

ClampValue把value限制在minValue和maxValue之间,如果value改变,且sendCallback为true,便会发送m_OnValueChanged事件。同时会调用UpdateVisuals,更新Slider。

重写OnEnable,更新缓存引用UpdateCachedReferences,(获取m_FillRect.transform,m_FillRect的Image及其父RectTransform,获取m_HandleRect.transform及其父RectTransform)

调用Set方法,设置Slider的值,调用UpdateVisuals,更新Slider。

重写OnDisable方法,清除DrivenRectTransformTracker。

OnDidApplyAnimationProperties方法(应用动画属性时),会判断动画是否影响了表现,将表现修正回来。

OnRectTransformDimensionsChange(当RectTransform尺寸发生变化时),调用UpdateVisuals,更新Slider。

UpdateVisuals(),更新Slider

当m_FillImage.type == Image.Type.Filled时,改变m_FillImage.fillAmount调整进度条,否则调整m_FillRect.anchorMin和anchorMax,m_HandleRect.anchorMin和anchorMax,更新进度条和滑块的位置。

OnPointerDown(当鼠标点击或触摸按下),判断PointerDown事件的点是否在m_HandleRect区域内,如果在,把事件的点转换为m_HandleRect上的点,否则调用UpdateDrag,直接设置对应的值。

另外还重写了Selectable的OnMove、FindSelectableOnLeft、FindSelectableOnRight、FindSelectableOnUp和FindSelectableOnDown方法。当方向键按下并与Slider的方向一致时,便不在导航到下一个Selectable,而是修改value值(加减stepSize),即移动滑动条。

OnDrag,调用UpdateDrag,直接设置对应的值。

UpdateDrag()

将拖拽事件的点转换为m_HandleContainerRect上的点,减去Offset,除以m_HandleContainerRect的大小,得到normalizedValue,normalizedValue的set访问器会将它转换为value。

OnInitializePotentialDrag,设置事件useDragThreshold为false,即在拖拽事件开始前不需要额外的阈值判断。

当我们设置Slider的Direction时候,我们发现Slider发生了旋转。这就涉及到SetDirection方法。首先赋值新的direction,如果axis(Horizontal或Vertical)改变了,调用RectTransformUtility.FlipLayoutAxes,翻转坐标轴(例如从水平翻转到垂直)。如果reverseValue(反转值)改变了,调用RectTransformUtility.FlipLayoutOnAxis,水平翻转或垂直翻转。

猜你喜欢

转载自blog.csdn.net/qq826364410/article/details/88139208