如何分三个阶段处理滑块?

问题描述 投票:1回答:2

我在iOS应用中有一个UISlider对象,并使用以下代码初始化。

theSlider = UISlider()

基本功能还可以,但是我需要分别清楚地处理这三个事件:

  • 用户开始移动滑块时的事件。
  • 用户移动滑块时的事件。
  • 用户停止移动滑块时的事件。

当前我使用此代码:

theSlider.addTarget(self, action: #selector(sliderHandle(_:)), 
                    for: .valueChanged)

并且可以处理第二个事件。但是对于第一个和第三个,我想我需要不确定UISlider的子类。任何提示都将受到欢迎。

ios swift uislider
2个回答
0
投票

作为一般说明,请确保签出类层次结构,例如小部件的超类,以了解从其继承的小部件还有哪些其他方法可用。

[您不一定需要继承UISlider(),但是您可能想继承UISlider(),或者,如果您认为可重复使用是值得的,则取决于您正在做的事情,UIControl()

UISliderUIControl的子类,它是UIView的子类。UIControl是“ widgetized” UIView,换言之,提供了便于检测用户输入并支持发送事件的方法,这对于任何小部件都是通用的。

对于运动和位置检测,UIControl类具有方法beginTracking()continueTracking()endTracking()cancelTracking()isTracking()isTouchInside()。这些可以直接从UISlider()对象获得。

类似地,您可以使用sendAction()sendActions()显式触发动作(事件),也可用于UISlider。>

如果不需要子类化,您可以编写一个“一次性”(例如,特定于应用程序的代码),以直接通过您的UISlider()对象直接利用上述方法,直接跟踪与小部件并在滑动路径上的关键位置或您检测到的特定行为下传递事件。

请参见此问题,"IPhone: How to detect end of slider drag"了解实施思路。

Apple的UIControl documentation有一个子类说明部分,说明如何使用目标动作机制。


0
投票

UIControl.Event除.valueChanged外还有许多其他值。 .touchDown可以告诉您用户何时开始与滑块交互,而. touchUpInside.touchUpOutside对可以告诉您用户何时完成拖动。这是一个游乐场示例:

© www.soinside.com 2019 - 2024. All rights reserved.