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

时间:2017-01-05 12:42:26

标签: ios swift uislider

我正在使用Swift 3和Xcode 8.2。 在斯威夫特很新。 我有一个水平UISlider来控制音量从1到16作为最小值和最大值,当我执行print()时它会返回浮点值。如何将其值限制为整数?

 @IBOutlet var ringValue: UISlider!

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

提前致谢!

7 个答案:

答案 0 :(得分:14)

UISlider的{​​{1}}属性属于Float类型,因此您无法对其进行更改,但可以使用Int将其转换为Int(sender.value)

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

答案 1 :(得分:7)

如果您希望Slider仅在步骤中定位:

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

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

答案 2 :(得分:3)

static void print()
{
  // store in static array to compile faster
  std::vector<T> args = {list...};
  // use for idiom for each except the last, but this time in reserve way
  // assgn char* space to empty char first
  const char* space = "";
  if (sizeof...(list) == 0)
  {
    // simple just call space to cout , if not warning no variable used
    std::cout <<'"' <<"Empty List" <<'"' << space  <<std::endl;
  }
  else if  (std::is_same<T, char>::value)
  {
    std::cout << '"';
    for (auto const& elem : args)
    {
        std::cout << space << elem; 
    }
    std::cout << '"' << space<< std::endl;
  }
  else
  {
     std::cout << '"';
     for (auto const& elem : args)
     {
        std::cout << space << elem; 
        space = " ";
     }
     std::cout << '"' << std::endl;
  }    
}  

答案 3 :(得分:1)

  

我有一个水平UISlider来控制音量从1到16为min   和最大值...

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

如果你想根据滑块值得到1到16之间的整数,你应该使用额外的简单数学做@NiravD suggested:)

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

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

答案 4 :(得分:1)

要使滑块更流畅并且一次取一个结果(当用户停止滑动时),您可以在viewDidLoad内使用此行:

ringValue.isContinuous = false

然后你可以选择如何处理我喜欢jboi答案的其他答案之一的结果,这样就会得到离散值。

答案 5 :(得分:0)

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
}

答案 6 :(得分:0)

SwiftUI

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