如何将 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))")
}
}
我有一个水平 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))")
}
}