75

我如何UISlider1-100为增量5

4

7 回答 7

167

像这样添加一个目标:

slider.continuous = YES;
[slider addTarget:self
      action:@selector(valueChanged:) 
      forControlEvents:UIControlEventValueChanged];

并在 valueChanged 函数中将值设置为可被 5 整除的最接近的值。

[slider setValue:((int)((slider.value + 2.5) / 5) * 5) animated:NO];

因此,如果您需要 5 以外的任何间隔,只需将其设置为:

float interval = 5.0f;//set this
[slider setValue:interval*floorf((slider.value/interval)+0.5f) animated:NO];
于 2010-03-25T21:32:44.580 回答
70

Swift 中稍微优雅一点的解决方案可能是这样的

let step: Float = 5
@IBAction func sliderValueChanged(sender: UISlider) {
  let roundedValue = round(sender.value / step) * step
  sender.value = roundedValue
  // Do something else with the value

}

这样你就可以得到 5 个步骤。你可以在我的帖子中阅读更多关于设置的信息。

于 2015-11-16T20:08:10.337 回答
9

还有另一种激活步进功能的方法。在一般情况下工作

例子:

数据范围是 0 - 2800,我希望增量为 25 个单位值。我会做以下事情

  1. 将滑块的范围设置为 0 - (maxRange/unitsteps)。
  2. 当值更改方法运行时使用 (int)slider.value * unitsteps 。

在上面的示例中,我的滑块将在 IB 中设置为范围 0 - 112。我的代码将是 (int)slider.value * 25。

如果您有一个可以修改为直接输入的文本字段,您只需执行相反的操作,将滑块值设置为 [textfield.text intValue]/unitsteps。

于 2011-10-07T15:15:20.110 回答
7

对于任何寻找 Swift 语法的人...

override func viewDidLoad() {
    super.viewDidLoad()
    mySlider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
}

func sliderValueDidChange(sender:UISlider!)
{
    //Set value to the nearest 5...
    print((Float)((Int)((sender.value + 2.5) / 5) * 5))
    sender.setValue((Float)((Int)((sender.value + 2.5) / 5) * 5), animated: false)
}

或者,只需使用 Assistant Editor 创建一个 Action 函数(我最终做了什么)......

@IBAction func mySliderValueChanged(sender: UISlider) {
    //Set value to the nearest int
    sender.setValue(Float(roundf(sender.value)), animated: false)

}
于 2015-07-20T17:29:34.597 回答
7

在 swift 3 中,增量为 +/- 7 的滑块:

@IBOutlet weak var sldComponent: UISlider!

...

sldComponent.addTarget(self, action:  #selector(_sldComponentChangedValue),for: .valueChanged)

...

func _sldComponentChangedValue(sender: UISlider!) {

        self.sldComponent.setValue((round(sender.value / 7) * 7), animated: false)
        print("\(sender.value)")

}
于 2017-04-13T12:31:31.830 回答
0

为什么不只是:

@IBAction func onSlider(_ sender: UISlider) {
    let value = Int(sender.value)
    if value % 5 == 0 {
        // handle(value) ... 
    }
}
于 2021-10-07T02:29:33.847 回答
-4
1. In storyboard mode, drag and drop a stepper and label.  the label will show the stepper values. 
  1. 左键单击并将标签和步进器作为出口拖到您的视图控制器。

名称标签为“stepperValue”

  1. 再次拖放步进器使其成为功能-我称我为“功能”

@IBAction func inc(sender: AnyObject) {
stepperValue.text = "(Int(stepper.value) * 5 )"

单击步进器,它将增加 5

于 2016-04-26T16:18:38.467 回答