web-dev-qa-db-fra.com

Comment implémenter UITapGestureRecognizer dans mon application

Je suis assez nouveau dans la programmation et l'Objectif C. Je me demandais comment faire une application qui a un écran vide et une minuterie qui dure une minute. Vous êtes censé taper aussi vite que possible et aussi longtemps que vous le pouvez. Je me demandais comment implémenter le UITapGestureRecognizer dans mon code.

42
objective_c_pro

Voici un guide étape par étape sur la façon d'implémenter des reconnaisseurs de gestes dans votre classe:

  1. Conformez votre classe au protocole UIGestureRecognizerDelegate.

  2. Instanciez la reconnaissance des gestes. Par exemple, pour instancier un UITapGestureRecognizer, nous allons faire:

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

    Ici, l'action est le sélecteur qui gérera le geste. Ici, notre sélecteur handleTapFrom ressemblera à quelque chose comme:

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

    L'argument du sélecteur est le reconnaisseur de gestes. Nous pouvons utiliser ce reconnaisseur de gestes pour accéder à ses propriétés, par exemple, nous pouvons trouver l'état du reconnaisseur de gestes, comme, UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded, etc.

  3. Définissez les propriétés souhaitées sur la reconnaissance de mouvement instanciée. Par exemple, pour un UITapGestureRecognizer, nous pouvons définir les propriétés numberOfTapsRequired et numberOfTouchesRequired.

  4. Ajoutez la reconnaissance des gestes à la vue pour laquelle vous souhaitez détecter les gestes. Dans notre exemple de code (je partagerai ce code pour votre référence), nous ajouterons des reconnaisseurs de gestes à une imageView avec la ligne de code suivante:

    [self.imageView addGestureRecognizer:tapGestureRecognizer];
    
  5. Après avoir ajouté le reconnaisseur de gestes à la vue, définissez le délégué pour le reconnaisseur de gestes, c'est-à-dire la classe qui gérera tous les éléments du reconnaisseur de gestes. Dans notre exemple de code, ce serait comme:

    tapGestureRecognizer.delegate = self;
    

    Remarque: Affectez le délégué après avoir ajouté la reconnaissance des gestes à la vue. Sinon, la méthode d'action ne sera pas appelée.

94
Mathew Varghese
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
14
user3098709

Exemple dans 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.")
        }
    }

}
13
King-Wizard

Si vous travaillez Swift (iOS9) et SpriteKit, essayez ce qui suit.

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")
    }
}
0
dbbudd