ios - 如何分三个阶段处理 slider ?

标签 ios swift uislider

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

相关文章:

swift - 在常量结构下从计算属性转换为惰性变量是否正确?

ios - 快速导入模块

swift - Xcode 6- SWIFT- 将 CMTime 转换为 Float

ios - View 隐藏时如何禁用 UISlider 交互?

ios - 'PF Object' 没有可见的@interface

ios - 在带有 Xcode 8 的 Objective C 中使用图表(BarChartDataEntry)iOS 库

ios - 为什么副本捆绑资源中的文件显示为红色?

ios - CIAffineClamp 过滤器不夹紧

ios - UISlider - 缺少的功能 - 快照、工具提示和刻度

iphone - NSString stringWithFormat 仪器内存泄漏