2011-12-06 6 views
10

Skąd wiadomo, kiedy palec jest w dół i kiedy jest on ustawiony na UITapGestureRecognizer?
documentation mówi, że powinienem obsługiwać tylko UIGestureRecognizerStateEnded jako dotknięcie, więc oznacza to, że jest UIGestureRecognizerStateBegin kiedy palec jest opuszczony, ale wszystko, co dostaję, to UIGestureRecognizerStateEnded.
Kod użyć do zarejestrowania rozpoznawania jest:wykrywanie palca w górę/w dół UITapGestureRecognizer

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

Jeśli masz ten sam problem, sprawdź ten link, to jest piękno: [guides.codepath.com] (https://guides.codepath.com/ios/Using-Gesture-Recognizers#programmatically-add i -konfiguruj-a-gest-rozpoznawanie) – MoVod

Odpowiedz

18

UITapGestureRecognizer jest dyskretny gest rozpoznawania i dlatego nigdy nie przechodzi do rozpoczęły lub zmienionych stanach. Z UIGestureRecognizer Class Reference:

Dyskretne gesty przejścia z możliwe albo Uznane (UIGestureRecognizerStateRecognized) lub Failed (UIGestureRecognizerStateFailed), w zależności od tego, czy powodzeniem interpretować gest czy nie. Jeśli rozpoznawanie gestów zostanie zmienione na Rozpoznane, wysyła komunikat o akcji do celu.

(Pamiętając oczywiście, że UIGestureRecognizerStateRecognized == UIGestureRecognizerStateEnded).

Dokumenty mówią, że powinieneś sprawdzić stan wykrywacza gestów, aby zobaczyć, że jest on w stanie zakończenia, zanim wystrzelisz kod, aby powiedzieć, że został rozpoznany. Nie twierdzą, że gest dotykowy faktycznie przechodzi w stan początkowy lub zmieniony (chociaż przyznaję, że dokumenty są trochę mylące w używanym języku!).

Jeśli chcesz sprawdzić, na razie palcem dół dla rozpoznawania gestów kran, polecam tylko przy użyciu touchesBegan:withEvent:, ponieważ to jest to, czego naprawdę po tak.

1

Można zastąpić metodę delegata -(BOOL)gestureRecognizer:shouldReceiveTouch:.

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

    return YES; 
}