Mam dwa UIGestureRecognizers dla widoku, który rozpoznaje oba jednocześnie. Chciałbym zakończyć lub anulować pierwszy gest, aby zabić również drugi gest. Czy istnieje sposób na zabicie aktywnego gestu, tj. wymuszenie anulowania aktywnego aparatu rozpoznawania gestów?

1
SK9 27 maj 2011, 13:15

2 odpowiedzi

Najlepsza odpowiedź

Ponieważ chcesz zabić gest dodatkowy tylko po zakończeniu lub anulowaniu gestu głównego, zrób to w obsłudze gestów gestu głównego.

- (void)handleGesture:(UIGestureRecognizer*)gesture {
    ...
    if ( gesture.state == UIGestureRecognizerStateEnded || gesture.state == UIGestureRecognizerCancelled ) {
        secondaryGesture.enabled = NO;
        secondaryGesture.enabled = YES;
    }
}

Wydaje się, że to jedyny sposób na anulowanie gestu.


requireGestureRecognizerToFail:
[secondaryGesture requireGestureRecognizerToFail:primaryGesture];

To zabije gest wtórny po pomyślnej identyfikacji gestu podstawowego. Takie narzędzie nie jest dostępne, jeśli główny gest zostanie anulowany. Prawdopodobnie możesz przestawić flagę enabled dodatkowego gestu na NO i YES w obsłudze gestów głównego gestu na UIGestureRecognizerStateCancelled, ale to nie wydaje się eleganckie.

2
Deepak Danduprolu 28 maj 2011, 09:17
Dzięki za to. Nie chcę zabijać drugiego gestu, dopóki nie zakończy się pierwszy gest, czyli po zakończeniu (nie identyfikacji) tylko pierwszego gestu.
 – 
SK9
28 maj 2011, 08:49

W zależności od gestów możesz chcieć mieć oba. Natknąłem się na problem, w którym gesty przeszkadzały sobie nawzajem i przez chwilę miałem coś podobnego do tego rozwiązania. Dwa gesty, których próbowałem użyć, to gest uszczypnięcia i obrócenia. Idealnie chciałem, aby użytkownik mógł płynnie przechodzić między nimi bez konieczności anulowania jednego, który udało mi się osiągnąć. Opisałem jak to zrobiłem tutaj i podałem film instruktażowy Mam nadzieję, że to może komuś pomóc.

0
Scott Sherwood 20 październik 2011, 03:04