我在 iOS 应用程序中有一个 UISlider 对象,使用以下代码初始化。
theSlider = UISlider()
基本的功能是可以的,但是我需要的是清楚的分别处理这三个事件:
- 用户开始移动 slider 时的事件。
- 用户移动 slider 时的事件。
- 用户停止移动 slider 时的事件。
目前我使用这段代码:
theSlider.addTarget(self, action: #selector(sliderHandle(_:)),
for: .valueChanged)
然后处理第二个事件就OK了。 但是对于第一个和第三个,我想我需要在不确定的情况下继承 UISlider。欢迎任何提示。
最佳答案
UIControl.Event 除了 .valueChanged
之外还有许多其他值。 .touchDown
可以告诉您用户何时开始与 slider 和 对进行交互。 touchUpInside
和 .touchUpOutside
可以在用户完成拖动时告诉您。这是一个 Playground 示例:
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 - 如何分三个阶段处理 slider ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59636515/