我如何UISlider
以1-100
为增量5
?
7 回答
像这样添加一个目标:
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];
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 个步骤。你可以在我的帖子中阅读更多关于设置的信息。
还有另一种激活步进功能的方法。在一般情况下工作
例子:
数据范围是 0 - 2800,我希望增量为 25 个单位值。我会做以下事情
- 将滑块的范围设置为 0 - (maxRange/unitsteps)。
- 当值更改方法运行时使用 (int)slider.value * unitsteps 。
在上面的示例中,我的滑块将在 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)
}
或者,只需使用 Assistant Editor 创建一个 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)")
}
为什么不只是:
@IBAction func onSlider(_ sender: UISlider) {
let value = Int(sender.value)
if value % 5 == 0 {
// handle(value) ...
}
}
1. In storyboard mode, drag and drop a stepper and label. the label will show the stepper values.
- 左键单击并将标签和步进器作为出口拖到您的视图控制器。
名称标签为“stepperValue”
- 再次拖放步进器使其成为功能-我称我为“功能”
@IBAction func inc(sender: AnyObject) {
stepperValue.text = "(Int(stepper.value) * 5 )"
单击步进器,它将增加 5