我在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/

10-14 23:36