2011-12-06 10 views
10

Come posso sapere quando il dito è abbassato e quando è attivo con UITapGestureRecognizer?
Il documentation dice che dovrei gestire solo UIGestureRecognizerStateEnded come rubinetto quindi significa che c'è UIGestureRecognizerStateBegin quando il dito è giù, ma tutto quello che ottengo è UIGestureRecognizerStateEnded.
Il codice che uso per registrare il sistema di riconoscimento è:rilevamento dito su/giù UITapGestureRecognizer

[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)] 
+0

Se avete lo stesso problema controlla questo link, è una bellezza: [guides.codepath.com] (https://guides.codepath.com/ios/Using-Gesture-Recognizers#programmatically-add -e-configure-a-gesto-riconoscitore) – MoVod

risposta

18

UITapGestureRecognizer è un riconoscitore gesto discreta, e quindi mai transizioni agli stati cominciarono o modificati. Dal UIGestureRecognizer Classe Riferimento:

gesti discreti passaggio dal possibile utilizzare i comandi Riconosciuto (UIGestureRecognizerStateRecognized) o Failed (UIGestureRecognizerStateFailed), a seconda che interpretano con successo il gesto o meno. Se le transizioni del riconoscimento di gesture in Riconoscimento, invia il suo messaggio di azione alla sua destinazione.

(Ricordando ovviamente che UIGestureRecognizerStateRecognized == UIGestureRecognizerStateEnded).

I documenti dicono che è necessario controllare lo stato di un rilevatore di gesti tocco per verificare che si trovi nel suo stato di fine, prima di attivare il codice per dire che è stato riconosciuto. Non stanno dicendo che il gesto del tocco passa effettivamente agli stati iniziati o cambiati (anche se ammetto che i documenti sono un po 'fuorvianti nella lingua usata!).

Se si desidera verificare l'evento finger down per un indicatore di tocco, si consiglia di utilizzare solo touchesBegan:withEvent:, poiché questo è ciò che si è veramente dopo lo stesso.

1

È possibile eseguire l'override del metodo delegato -(BOOL)gestureRecognizer:shouldReceiveTouch:.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    NSLog(@"Hello from press down"); 

    return YES; 
} 
Problemi correlati