J'ai une fonction sliderValueChange
qui met à jour un texte de UILabel
. Je souhaite qu'il y ait une limite de temps pour effacer le texte de l'étiquette, mais je veux également que cette action "temporisée" soit annulée & redémarré ou retardée chaque fois que le UISlider
est déplacé dans le délai avant que l'action "temporisé" ne prenne endroit.Comment annuler et redémarrer un événement minuté dans Swift?
Jusqu'à présent, c'est ce que j'ai:
let task = DispatchWorkItem {
consoleLabel.text = ""
}
func volumeSliderValueChange(sender: UISlider) {
task.cancel()
let senderValue = String(format: "%.2f", sender.value)
consoleLabel.text = "Volume: \(senderValue)"
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3, execute: task)
}
De toute évidence, cette approche ne fonctionne pas, car cancel()
apparemment ne peut pas être inversée .. (ou du moins je ne sais pas comment). Je ne sais pas non plus comment démarrer une nouvelle tâche à la fin de cette fonction qui sera annulée si la fonction est rappelée.
Est-ce que je vais dans ce sens? Y a-t-il quelque chose que je néglige pour faire ce travail?
Je voudrais un NSTimer. Vous devez toujours annuler (invalider) et reporter la minuterie si vous voulez changer la période de la minuterie. Mais si vous voulez utiliser une tâche, oui, vous devrez créer et soumettre une nouvelle tâche. – Paulw11