2012-10-24 6 views

Odpowiedz

29

ACB zacytował numer referencyjny UIGestureRecognizer. Aby zrobić to trochę bardziej konkretne, załóżmy, że masz widok z patelni rozpoznawania gestów załączony i masz te metody w kontrolerze widoku:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesBegan"); 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesMoved"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesEnded"); 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { 
    NSLog(@"touchesCancelled"); 
} 

- (IBAction)panGestureRecognizerDidUpdate:(UIPanGestureRecognizer *)sender { 
    NSLog(@"panGesture"); 
} 

I oczywiście pan gest rozpoznawania jest skonfigurowany do wysyłania panGestureRecognizerDidUpdate: wiadomość.

Załóżmy, że dotykasz widoku, przesuń palec na tyle, aby gest panoramy został rozpoznany, a następnie podnieś palec. Co drukuje aplikacja?

Jeśli rozpoznawania gest ma cancelsTouchesInView zestaw do YES, aplikacja będzie rejestrować te wiadomości:

touchesBegan 
touchesMoved 
touchesCancelled 
panGesture 
panGesture 
(etc.) 

Można dostać więcej niż jedną touchesMoved przed anuluj.

Jeśli więc ustawisz cancelsTouchesInView na YES (ustawienie domyślne), system anuluje dotyk przed wysłaniem pierwszej wiadomości z urządzenia do rozpoznawania gestów, a nie dostaniesz więcej komunikatów dotykowych związanych z tym dotknięciem.

Jeśli rozpoznawania gest ma cancelsTouchesInView zestaw do NO, aplikacja będzie rejestrować te wiadomości: Czyli

touchesBegan 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
touchesMoved 
panGesture 
(etc.) 
panGesture 
touchesEnded 

, jeśli ustawisz cancelsTouchesInView do NO, system będzie kontynuować wysyłanie wiadomości związane dotykowe dla gesty dotykowe, przeplatane wiadomościami od rozpoznania gestu. Dotknięcie zakończy się normalnie, a nie zostanie anulowane (chyba że system anuluje dotyk z jakiegoś innego powodu, np. Naciśnięcie przycisku głównego podczas dotykania).

+0

Dzięki! Po ustawieniu cancelTouchesInView na Nie, wydarzenie zostanie anulowane, gdy kliknięcie zostanie wykonane prawidłowo? – jebberwocky

+1

Nie rozumiem, co oznacza "anuluj pojawianie się". –

3

z portalu jabłko dewelopera link:

cancelsTouchesInView - Jeśli rozpoznawania gest ujmuje swój gest, to usuwa powiązanie pozostałe akcenty ten gest z ich widoku (a więc okno nie dostarczy ich). Okno anuluje wcześniej podane dotknięcia za pomocą wiadomości (touchesCancelled: withEvent :). Jeśli urządzenie rozpoznające gesty nie rozpoznaje gestu, widok otrzymuje wszystkie dotknięcia w sekwencji wielokrotnego dotyku.

cancelsTouchesInView:

wartość logiczna wpływając czy akcenty są dostarczane do widzenia gdy gest został rozpoznany.

@property (nonatomic) BOOL cancelsTouchesInView

Dyskusja

Gdy nieruchomość jest TAK (ustawienie domyślne), a odbiornik rozpoznaje jego gest, poruszenia tego gestu oczekujące nie są dostarczane do widoku , a wcześniej dostarczone poprawki są anulowane za pomocą dotknięćCancelled: withEvent: wiadomość wysłana do widoku. Jeśli gest rozpoznania nie rozpoznaje gestu lub jeśli wartość tej właściwości wynosi NIE, widok odbiera wszystkie dotknięcia w sekwencji multi-touch .

+0

Co to jest "dotyk tego gestu, OCZEKUJĄCY ..."? –

Powiązane problemy