如何UISlider
以1-100
为增量从5
开始?
答案 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个单位值。我会做以下
在上面的示例中,我的滑块将在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.
名称标签为" stepperValue"
@IBAction func inc(发件人:AnyObject){
stepperValue.text ="(Int(stepper.value)* 5)"
单击步进器,它将增加5