34

Soy bastante nuevo en programación y Objective C. Me preguntaba cómo hacer una aplicación que tenga una pantalla en blanco y un temporizador que dure un minuto. Debes tocar tan rápido como puedas y mientras puedas. Me preguntaba cómo implementar el UITapGestureRecognizer en mi código.¿Cómo implemento UITapGestureRecognizer en mi aplicación?

+0

Ayuda a sí mismo: https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

Respuesta

86

Ésta es una guía paso a paso sobre cómo implementar reconocedores gesto en su clase:

  1. Conform su clase para UIGestureRecognizerDelegate protocolo.

  2. Crea una instancia del reconocedor de gestos. Por ejemplo, para crear instancias de un UITapGestureRecognizer, haremos:

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)]; 
    

    Aquí, la acción es el selector que manejará el gesto. Aquí, nuestro selector handleTapFrom tendrá el siguiente aspecto:

    - (void) handleTapFrom: (UITapGestureRecognizer *)recognizer 
    { 
        //Code to handle the gesture 
    } 
    

    El argumento para el selector es el reconocedor de gestos. Podemos utilizar este reconocedor gesto para acceder a sus propiedades, por ejemplo, podemos encontrar el estado del reconocedor gesto, como, UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded, etc.

  3. Establecer las propiedades deseadas en el reconocedor gesto instanciada. Por ejemplo, para un UITapGestureRecognizer, podemos establecer las propiedades numberOfTapsRequired y numberOfTouchesRequired.

  4. Agregue el reconocedor de gestos a la vista para la que desea detectar los gestos. En nuestro código de ejemplo (Me gustaría poder compartir ese código para su referencia), añadiremos reconocedores gesto a un imageView con la siguiente línea de código:

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. Después de añadir el reconocedor gesto a la vista, establezca la delegar para el reconocedor de gestos, es decir, la clase que manejará todas las cosas del reconocedor de gestos. En nuestro código de ejemplo, que sería como:

    tapGestureRecognizer.delegate = self; 
    

    Nota: Asignar el delegado después de añadir el reconocedor gesto a la vista. De lo contrario, no se llamará al método de acción.

+0

Lo siento por el formato inadecuado !!! –

+0

Muchas gracias por su ayuda chicos! –

+2

No hay nada de lo que preocuparse. Hay una curva de aprendizaje cuando se trata de formato de marcado. – nhahtdh

11
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.tableView addGestureRecognizer:gestureRecognizer]; 
self.tableView.userInteractionEnabled = YES; 
gestureRecognizer.cancelsTouchesInView = NO; // this prevents the gesture recognizers to 'block' touches 
9

Ejemplo de Swift:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var myUIImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:") 
     singleTap.numberOfTapsRequired = 1 
     singleTap.numberOfTouchesRequired = 1 
     self.myUIImageView.addGestureRecognizer(singleTap) 
     self.myUIImageView.userInteractionEnabled = true 
    } 

    func myUIImageViewTapped(recognizer: UITapGestureRecognizer) { 
     if(recognizer.state == UIGestureRecognizerState.Ended){ 
      println("myUIImageView has been tapped by the user.") 
     } 
    } 

} 
+2

Correcto, userInteractionEnabled es esencial. ¡Gracias! –

+0

No entiendo por qué es necesario comprobar "recognizer.state == UIGestureRecognizerState.Ended". Probé esto y funciona sin él también. Mi suposición es que lo necesita para el reconocedor de gestos de múltiples pulsaciones, pero para un solo toque, ¿aún lo necesitamos? – plam4u

0

Si está trabajando Swift (iOS9) y SpriteKit, intente lo siguiente.

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let singleTap = UITapGestureRecognizer(target:self, action:#selector(self.handleSingleTap:)) 
     singleTap.numberOfTouchesRequired = 1 
     singleTap.addTarget(self, action:#selector(self.handleSingleTap)) 
     view.userInteractionEnabled = true 
     view.addGestureRecognizer(singleTap) 
    } 
    //event handler 
    func handleSingleTap(sender:UITapGestureRecognizer){ 
     print("tapped") 
    } 
} 
Cuestiones relacionadas