UITapGestureRecognizer interfiere con UISlider

Tengo un problema relacionado con el gesto, algo similar a: gesture-problem-uiswipegesturerecognizer-uislider

Pero codifico rápido y necesito una solución rápida.

Lo que sucede en mi proyecto es esto: tengo un ViewController en el que un toque en la pantalla por el usuario, llevará a cabo una segue. Pero tengo un UISlider en este viewcontroller, y cuando un usuario 'libera' el control deslizante es a veces (por qué a veces y no siempre, me confunde) reconocido como un toque en la pantalla.

Así que entiendo que tengo que evitar que el reconocedor de gestos 'vea / reconozca' los toques en el UIslider .

¿Pero cómo evito esto? (en swift 2.0, usando Xcode7. Pero también lo entiendo si usas una encoding rápida anterior en una respuesta). Soy bastante nuevo en la encoding en swift. ¡Espero que alguien pueda ayudar!

Aquí está el código en el viewcontroller:

 // The slider @IBOutlet weak var sliderValue: UISlider! @IBAction func sliderValueChanged(sender: UISlider) { // Do stuff } // UITapGestureRecognizer override func viewDidLoad() { super.viewDidLoad() let touch = UITapGestureRecognizer(target: self, action: "touched:") self.view.addGestureRecognizer(touch) } // Perform Segue func touched (_: UIGestureRecognizer) { //Segue to another viewcontroller performSegueWithIdentifier("nice", sender: self) } 

(EDIT 🙂 Actualicé mi código con información que encontré aquí en stackoverflow. He agregado UIGestureRecognizerDelegate :

  class LampOn: UIViewController, UIGestureRecognizerDelegate {...} 

Y he agregado shouldReceiveTouch :

 func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { gestureRecognizer.delegate = self if (touch.view == sliderValue){ print("touching slider") return false } else{ print("touching elsewhere") return true } } 

Pero la function 'shouldReceiveTouch` nunca se llama desde la console. Entonces, ¿qué me estoy perdiendo? ¿Configuré el delegado correctamente?

    La function "shouldReceiveTouch" nunca se llama porque configura el delegado dentro de la function "shouldReceiveTouch". El delegado debe configurarse a sí mismo ANTES de que se pueda llamar a la function.

    Lo que debe hacer es configurar el delegado dentro de viewDidLoad () y todo debería estar bien.

     override func viewDidLoad() { super.viewDidLoad() let touch = UITapGestureRecognizer(target: self, action: "touched:") self.view.addGestureRecognizer(touch) touch.delegate = self }