107 votes

iPhone : Comment détecter la fin du glissement du curseur ?

Comment détecter l'événement lorsque l'utilisateur a terminé le glisser d'un pointeur de curseur ?

188voto

rokjarc Points 11314

Si vous n'avez besoin d'aucune donnée entre les glisser, vous devez simplement définir :

 [mySlider setContinuous: NO];

De cette façon, vous ne recevrez l' valueChanged que lorsque l'utilisateur arrête de déplacer le curseur.

Version Swift 5:

 mySlider.isContinuous = false

135voto

pinch Points 951

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.

19voto

Guy Daher Points 734

Swift 5 et Swift 4

  1. Ajouter une cible pour les événements touchUpInside et touchUpOutside Vous pouvez le faire par programmation ou à partir d'un storyboard. Voici comment procéder par programmation

     slider.addTarget(self, action: #selector(sliderDidEndSliding), for: [.touchUpInside, .touchUpOutside])
    
  2. Écrivez votre fonction pour gérer la fin du glissement du curseur

     func sliderDidEndSliding() {
        print("end sliding")
    }
    

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X