增量为 5 的 UISlider
Posted
技术标签:
【中文标题】增量为 5 的 UISlider【英文标题】:UISlider with increments of 5 【发布时间】:2010-03-25 21:16:18 【问题描述】:如何让我的UISlider
从1-100
以5
为增量?
【问题讨论】:
【参考方案1】:像这样添加一个目标:
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];
【讨论】:
我真的觉得自己很愚蠢。吸引我的总是简单的事情。 谢谢,避免我想太多 ^^ 但是我确实做了一点改变:int increment = 10; [numberOfAppsInFutur setValue:((int)((numberOfAppsInFutur.value + increment/2.) / increment) * increment) 动画:NO]; 如果有帮助,有一个完整的例子here。【参考方案2】:在 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 中阅读有关设置的更多信息。
【讨论】:
链接到只有广告的网站【参考方案3】:还有另一种激活步进功能的方法。在一般情况下工作
例子:
数据范围是 0 - 2800,我希望增量为 25 个单位值。我会做以下事情
-
将滑块的范围设置为 0 - (maxRange/unitsteps)。
当值更改方法运行时使用 (int)slider.value * unitsteps。
在上面的示例中,我的滑块将在 IB 中设置为范围 0 - 112。 我的代码是 (int)slider.value * 25。
如果您有一个可以修改为直接输入的文本字段,您只需执行相反的操作,将滑块值设置为 [textfield.text intValue]/unitsteps。
【讨论】:
这样做的副作用是它可以帮助强制限制文本字段值... 这对我来说似乎是完美的解决方案。【参考方案4】:对于任何寻找 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)
【讨论】:
【参考方案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)")
【讨论】:
【参考方案6】:为什么不只是:
@IBAction func onSlider(_ sender: UISlider)
let value = Int(sender.value)
if value % 5 == 0
// handle(value) ...
【讨论】:
【参考方案7】:1. In storyboard mode, drag and drop a stepper and label. the label will show the stepper values.
-
左键单击并将标签和步进器作为出口拖到您的视图控制器。
将标签命名为“stepperValue”
-
再次拖放步进器使其成为 func - 我将我的称为“func”
@IBAction func inc(sender: AnyObject) stepperValue.text = "(Int(stepper.value) * 5 )"
点击步进器,它会增加 5
【讨论】:
以上是关于增量为 5 的 UISlider的主要内容,如果未能解决你的问题,请参考以下文章