我怎么有我的UISlider
去从1-100
,增量5
?
Answers:
添加这样的目标:
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];
有另一种激活步进器功能的方法。在一般情况下工作
例:
数据范围是0-2800,我希望增量为25个单位值。我会做以下
在上面的示例中,我的滑块将在IB中设置为0-112。我的代码为(int)slider.value * 25。
如果您有一个可以修改为直接输入的文本字段,则只需执行相反的操作即可将滑块值设置为[textfield.text intValue] / unitsteps。
对于任何寻求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)
}
或者,只需使用助手编辑器创建一个Action函数(我最终要做的事情)...
@IBAction func mySliderValueChanged(sender: UISlider) {
//Set value to the nearest int
sender.setValue(Float(roundf(sender.value)), animated: false)
}
在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)")
}