2017-10-16 7 views
0

J'ai un problème qui a été mise sur écoute-moi pour la dernière journée et je ne peux pas comprendre la solution ...UISlider ne gère pas correctement l'événement .touchUpInside

J'ai un UISlider, qui va de valeurs 1 à 3 (c'est comme ça que nous en avons besoin). Le curseur est continu, car il met à jour certaines propriétés en fonction de sa valeur actuelle. Maintenant, je veux implémenter une fonction où le curseur déclenche des actions en fonction du moment où l'utilisateur commence à le toucher, ou termine le contact.

J'ai essayé d'utiliser la méthode .touchDown pour détecter le début des touches, qui fonctionne parfaitement. Cependant lorsque j'essaie d'utiliser .touchUpInside et .touchUpOutside pour détecter quand l'utilisateur soulève son doigt, l'événement ne se déclenche pas au moment approprié.

Quand je fais glisser mon doigt autour du curseur, une certaine distance de son point de départ, l'événement se déclenche. Mais quand je touche juste brièvement ou déplacer autour d'une petite quantité, l'événement touchup ne se déclenche pas du tout ...

que quelqu'un peut me aider? Voici le code que je utilise pour mettre en place mon curseur:

let slider: UISlider = { 
    let slider = UISlider() 
    slider.isContinuous = true 
    slider.minimumValue = 1 
    slider.maximumValue = 3 
    slider.setMinimumTrackImage(#imageLiteral(resourceName: "minimumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal) 
    slider.setMaximumTrackImage(#imageLiteral(resourceName: "maximumSliderTrackImage").resizableImage(withCapInsets: UIEdgeInsets(top: 0, left: 20, bottom: 0, right: 20)), for: .normal) 

    let sliderThumb = #imageLiteral(resourceName: "sliderThumbImage") 
    slider.setThumbImage(sliderThumb, for: .normal) 

    slider.addTarget(self, action: #selector(adjustPriceLabel), for: .valueChanged) 
    slider.addTarget(self, action: #selector(handleTouchDown), for: .touchDown) 
    slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside]) 

    slider.setValue(2.0, animated: true) 

    return slider 
}() 

@objc fileprivate func handleTouchDown() { 
    print(1234) 
} 

@objc fileprivate func handleTouchUp() { 
    print(5678) 
} 
+0

Alors ce que vous dites est que vous voir 'handleTouchDown()' être appelé et parfois 'handleTouchUp()' ne serait pas appelé ou? – Ladislav

+0

Exactement. Plus spécifiquement handleTouchUp() n'est appelé que lorsque je déplace le curseur à une certaine distance de sa position de départ ... –

+0

Pouvez-vous essayer de supprimer 'setMinimumTrackImage',' setMaximumTrackImage' et 'setThumbImage' et de tester à nouveau pour voir si vos images de pouce personnalisées sont à blâmer? – Ladislav

Répondre

0

Vous devriez essayer d'ajouter .touchCancel état d'aller à handleTouchUp aussi bien comme ceci:

slider.addTarget(self, action: #selector(handleTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel])