如何将 iOS 滑块值限制为整数?

How can I restrict iOS slider value to an integer?

我有一个水平 UISlider 来控制音量从 1 到 16 作为最小值和最大值,但是当我这样做时它返回浮点值 print()

如何将 UISlider 值限制为整数?

@IBOutlet var ringValue: UISlider!

@IBAction func ringVolumeSliderChange(_ sender: UISlider)
{
    print(sender.value)
}

value UISlider 的 属性 属于 Float 类型,因此您无法更改它,但可以使用 [=15= 将其转换为 Int ].

@IBAction func ringVolumeSliderChange(_ sender: UISlider) {
    print(Int(sender.value))
}

如果您希望滑块仅定位在步骤中,请执行以下操作:

@IBAction func ringVolumeSliderChange(_ sender: UISlider)
{
    sender.setValue(sender.value.rounded(.down), animated: true)
    print(sender.value)
}

在这个例子中,我假设您已经设置了最小值和最大值。现在,当用户四处滑动时,滑块会从一个位置跳到另一个位置。

I have a horizontal UISlider to control the volume from 1 to 16 as min and max value...

默认情况下,value属性的最小值为0.0,最大值为1.0。

如果您想根据滑块值获得从 1 到 16 的整数,您应该使用额外的 - 非常简单 - 数学运算 :)

@IBAction func ringVolumeSliderChange(_ sender: UISlider) {
    print(Int((sender.value * 15).rounded()) + 1)
}

让它成为 print(Int(sender.value)),如果滑块达到最大值 (1.0),它会打印 1,所有其他小于 1.0 的值将打印为 0。

为了使滑块更平滑并一次获取一个结果(当用户停止滑动时),您可以在 viewDidLoad 中使用此行:

ringValue.isContinuous = false

然后您可以选择如何处理其他答案之一的结果。我喜欢 jboi 的回答,所以它将采用离散值。

@IBAction func SliderValueChanged(_ sender: UISlider) {
    showValueSlider.text = String(format: "The value is:%i",Int(sender.value))
}
var slideValue: String = "0"

@objc private func didSliderValueChanged(_ sender: UISlider) {
    let formattedValue = String(format: "%.0f", sender.value)
    
    if let floatValue = Float(formattedValue) {
        sender.value = floatValue
    }
        
    guard formattedValue != slideValue else {
        return
    }

    //This part is optional, and can make slider more interactive
    UIImpactFeedbackGenerator(style: .medium).impactOccurred()

    slideValue = formattedValue
}

SwiftUI

@State private var diameter: Double = 10
var body: some View {
     HStack {
       Slider(value: $diameter, in: 0...100)
       Text("\(Int(diameter))")
     } 
}