UISlider,增量为5

时间:2010-03-25 21:16:18

标签: iphone ios uislider

如何UISlider1-100为增量从5开始?

6 个答案:

答案 0 :(得分:155)

添加如下目标:

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];

答案 1 :(得分:43)

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个步骤。您可以在post中了解有关设置的更多信息。

答案 2 :(得分:7)

还有另一种方法可以激活步进器功能。适用于一般情况

示例:

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

  1. 将滑块的范围设置为0 - (maxRange / unitsteps)。
  2. 当值更改方法运行时使用(int)slider.value * unitsteps。
  3. 在上面的示例中,我的滑块将在IB中设置为0到112。 我的代码是(int)slider.value * 25.

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

答案 3 :(得分:6)

对于任何寻找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)

}

答案 4 :(得分:5)

在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)")

}

答案 5 :(得分:-4)

1. In storyboard mode, drag and drop a stepper and label.  the label will show the stepper values. 
  1. 左键单击并将标签和步进器拖动到视图控制器作为插座。
  2. 名称标签为" stepperValue"

    1. 再次拖放步进使其成为一个功能 - 我称之为我的" func"
    2. @IBAction func inc(发件人:AnyObject){
                  stepperValue.text ="(Int(stepper.value)* 5)"

      单击步进器,它将增加5