34

Sono abbastanza nuovo alla programmazione e all'obiettivo C. Mi chiedevo come creare un'applicazione con uno schermo vuoto e un timer che dura per un minuto. Si intende toccare il più velocemente possibile e il più a lungo possibile. Mi chiedevo come implementare lo UITapGestureRecognizer nel mio codice.Come implementare UITapGestureRecognizer nella mia applicazione

+0

aiutare se stessi: https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

risposta

86

Questa è una guida passo passo su come implementare riconoscitori gesto nella classe:

  1. conforma la tua classe per UIGestureRecognizerDelegate protocollo.

  2. Istanziare il riconoscimento dei gesti. Ad esempio, per creare un'istanza di un UITapGestureRecognizer, faremo:

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

    Qui, l'azione è il selettore che gestirà il gesto. Qui, il nostro handleTapFrom selettore avrà un aspetto simile:

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

    L'argomento al selettore è il sistema di riconoscimento gesto. Possiamo usare questo gesto riconoscitore per accedere alle relative proprietà, per esempio, siamo in grado di trovare lo stato del sistema di riconoscimento gesto, come, UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded, ecc

  3. Impostare le proprietà desiderate sul sistema di riconoscimento gesto istanziato. Ad esempio, per un UITapGestureRecognizer, possiamo impostare le proprietà numberOfTapsRequired e numberOfTouchesRequired.

  4. Aggiungere il riconoscimento del gesto alla vista per cui si desidera rilevare i gesti. Nel nostro codice di esempio (sarò condividere che il codice per il vostro riferimento), aggiungeremo di riconoscimento gesto a un IMAGEVIEW con la seguente riga di codice:

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. Dopo aver aggiunto il sistema di riconoscimento gesto alla vista, impostare il delegato per il riconoscimento dei gesti, ovvero la classe che gestirà tutte le informazioni sul riconoscimento dei gesti. Nel nostro codice di esempio, sarebbe come:

    tapGestureRecognizer.delegate = self; 
    

    Nota: Assegnare il delegato dopo aver aggiunto il sistema di riconoscimento gesto alla vista. In caso contrario, il metodo di azione non verrà chiamato.

+0

Ci scusiamo per il formato inadeguato !!! –

+0

Grazie mille per il vostro aiuto ragazzi! –

+2

Niente di cui dispiacersi. C'è una curva di apprendimento quando si tratta di formattazione del mark down. – 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

Esempio in 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

Esatto, userInteractionEnabled è essenziale. Grazie! –

+0

Non capisco perché è necessario controllare "recognizer.state == UIGestureRecognizerState.Ended". Ho provato questo e funziona anche senza. La mia ipotesi è che ne hai bisogno per il riconoscimento di gesture multi-tap ma per un solo tocco, ne abbiamo ancora bisogno? – plam4u

0

Se si sta lavorando Swift (iOS9) e SpriteKit, provare quanto segue.

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") 
    } 
} 
Problemi correlati