Comment détecter l'événement lorsque l'utilisateur a terminé le glisser d'un pointeur de curseur ?
Réponses
Trop de publicités?Vous pouvez ajouter une action qui prend deux paramètres, sender et un événement, pour UIControlEventValueChanged :
[slider addTarget:self action:@selector(onSliderValChanged:forEvent:) forControlEvents:UIControlEventValueChanged]
Vérifiez ensuite la phase de l'objet tactile dans votre gestionnaire :
- (void)onSliderValChanged:(UISlider*)slider forEvent:(UIEvent*)event {
UITouch *touchEvent = [[event allTouches] anyObject];
switch (touchEvent.phase) {
case UITouchPhaseBegan:
// handle drag began
break;
case UITouchPhaseMoved:
// handle drag moved
break;
case UITouchPhaseEnded:
// handle drag ended
break;
default:
break;
}
}
Swift 4 & 5
slider.addTarget(self, action: #selector(onSliderValChanged(slider:event:)), for: .valueChanged)
@objc func onSliderValChanged(slider: UISlider, event: UIEvent) {
if let touchEvent = event.allTouches?.first {
switch touchEvent.phase {
case .began:
// handle drag began
case .moved:
// handle drag moved
case .ended:
// handle drag ended
default:
break
}
}
}
Notez que dans Interface Builder, lors de l'ajout d'une action, vous avez également la possibilité d'ajouter à la fois des paramètres d'expéditeur et d'événement à l'action.
Swift 5 et Swift 4
-
Ajouter une cible pour les événements
touchUpInside
ettouchUpOutside
Vous pouvez le faire par programmation ou à partir d'un storyboard. Voici comment procéder par programmationslider.addTarget(self, action: #selector(sliderDidEndSliding), for: [.touchUpInside, .touchUpOutside])
-
Écrivez votre fonction pour gérer la fin du glissement du curseur
func sliderDidEndSliding() { print("end sliding") }