web-dev-qa-db-fra.com

Comment puis-je limiter la valeur du curseur iOS à un entier?

J'utilise Swift 3 Et Xcode 8.2. Assez nouveau chez Swift. J'ai un UISlider horizontal pour contrôler le volume de 1 à 16 en tant que valeur min et max, et il renvoie des valeurs flottantes lorsque je fais print(). Comment puis-je limiter sa valeur à un entier?

 @IBOutlet var ringValue: UISlider!

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

Merci d'avance!

10
Keyur Padalia
@IBAction func SliderValueChanged(_ sender: UISlider) {
        showValueSlider.text = String(format: "The value is:%i",Int(sender.value))
    }
5
Bill Vo

value la propriété de UISlider est de type Float donc vous ne pouvez pas changer cela mais vous pouvez la convertir en Int en utilisant Int(sender.value).

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

Si vous souhaitez que votre curseur ne se positionne qu'aux étapes, procédez comme suit:

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

Dans cet exemple, je suppose que vous avez défini des valeurs min et max. Maintenant, le curseur saute de position en position lorsque l'utilisateur se déplace.

9
jboi

J'ai un UISlider horizontal pour contrôler le volume de 1 à 16 comme valeur min et max ...

Par défaut, la valeur minimale de la propriété value est 0,0 et la valeur maximale est 1,0.

Si vous voulez obtenir un nombre entier de 1 à 16 en fonction de la valeur du curseur, vous devez faire quoi @ NiravD suggéré avec des mathématiques extra-assez simples :)

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

En le laissant comme print(Int(sender.value)), il imprime 1 si le curseur a atteint sa valeur maximale (1.0), toutes les autres valeurs sont inférieures à 1.0 imprimées en 0.

2
Ahmad F

Pour rendre le curseur plus fluide et obtenir un résultat à la fois (lorsque l'utilisateur arrête de glisser), vous pouvez utiliser cette ligne dans viewDidLoad:

ringValue.isContinuous = false

Ensuite, vous pouvez choisir la façon dont vous allez gérer le résultat de l'une des autres réponses J'ai aimé la réponse de jboi afin qu'elle prenne des valeurs discrètes.

2
mike vorisis