我在iOS应用程序中有一个UISlider对象,使用以下代码初始化。
theSlider = UISlider()
基本功能可以,但是我需要分别清楚地处理这三个事件:
用户开始移动滑块时发生的事件。
用户移动滑块时发生的事件。
用户停止移动滑块时发生的事件。
目前,我使用以下代码:
theSlider.addTarget(self, action: #selector(sliderHandle(_:)),
for: .valueChanged)
并且可以处理第二个事件。
但是对于第一个和第三个,我想我需要不确定UISlider的子类。任何提示都将受到欢迎。
最佳答案
除了.valueChanged
,UIControl.Event还有许多其他值。 .touchDown
可以告诉您用户何时开始与滑块交互,而. touchUpInside
和.touchUpOutside
对可以告诉您用户何时完成拖动。这是一个操场示例:
import SwiftUI
import PlaygroundSupport
class V: UIViewController {
let slider = UISlider(frame: .init(origin: .zero, size: .init(width: 200, height: 50)))
override func viewDidLoad() {
super.viewDidLoad()
slider.minimumValue = 0
slider.maximumValue = 100
slider.value = 50
slider.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(slider)
slider.addTarget(self, action: #selector(changed), for: .valueChanged)
slider.addTarget(self, action: #selector(began), for: .touchDown)
slider.addTarget(self, action: #selector(ended), for: .touchUpInside)
slider.addTarget(self, action: #selector(ended), for: .touchUpOutside)
}
@objc private func changed(sender: UISlider) {
print("Changed")
}
@objc private func began(sender: UISlider) {
print("Began")
}
@objc private func ended(sender: UISlider) {
print("Ended")
}
}
PlaygroundPage.current.liveView = V()
关于ios - 如何分三个阶段处理滑块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59636515/