UISlider,增量为5


Answers:


166

添加这样的目标:

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
老实说我很傻。总是简单的事情吸引我。
迈克尔·史密斯

1
谢谢,避免让我考虑太多。^^但是,我做了一点改动:int增量= 10; [numberOfAppsInFutur setValue:((int)((numberOfAppsInFutur.value +增量/2.)/增量)*增量)动画:否];
杰森·罗杰斯

如果有帮助,有一个完整的例子在这里
zekel 2014年

63

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步。您可以在我的文章中阅读有关设置的更多信息


2
链接仅访问带有广告的网站
Carioni

9

有另一种激活步进器功能的方法。在一般情况下工作

例:

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

  1. 将滑块的范围设置为0-(maxRange / unitsteps)。
  2. 当值更改方法运行时,请使用(int)slider.value * unitsteps。

在上面的示例中,我的滑块将在IB中设置为0-112。我的代码为(int)slider.value * 25。

如果您有一个可以修改为直接输入的文本字段,则只需执行相反的操作即可将滑块值设置为[textfield.text intValue] / unitsteps。


这样做的副作用是,它可以帮助强制限制文本字段值...
MB。

对我来说,这似乎是完美的解决方案。
Umair

7

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

}

6

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

}

-4
1. In storyboard mode, drag and drop a stepper and label.  the label will show the stepper values. 
  1. 左键单击并拖动标签和步进器作为出口到您的视图控制器。

名称标签为“ stepperValue”

  1. 拖放式步进器再次使其成为功能-我将其称为“ func”

@IBAction func inc(sender:AnyObject){
stepperValue.text =“(Int(stepper.value)* 5)”

单击步进器,它将增加5

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.