2011-12-04 9 views
6

Próbuję śledzić, gdzie jest palec w UIScrollView. Posiadam podklasę UIScrollView (patrz poniżej), ale niestety narzędzie do rozpoznawania gestów, które dodaję, jest nadrzędne względem standardowego.Dodaj funkcjonalność do standardowego Pan Gesture Recognizer w UIScrollView

W rezultacie otrzymuję NSLog(@"Pan") do pracy, ale niestety widok nie jest już przewijany.

Jak uzyskać do rozpoznawania gestów do pracy w tym samym czasie?

Dzięki.

- (void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
    [scrollView addGestureRecognizer:panRecognizer]; 
} 


- (void)pan:(id)sender { 
    NSLog(@"Pan"); 
} 
+2

Nie mówisz, czego się spodziewasz, gdy obie rzeczy dzieją się w tym samym czasie. Czy spodziewasz się, że przewiniesz * i * zaktualizujesz swój system rozpoznawania patelni? Jeśli tak, to dlaczego nie posłuchać metod delegatów przewijania, które są wywoływane podczas przewijania widoku? –

+0

Chciałbym, aby widok przewijał i zapisywał wszystkie dotknięte punkty (które wiem, że mogę odzyskać za pomocą metody 'locationInView:'). Delegat widoku przewijania wydaje się interesujący - nigdy nie słyszałem o tym ... Jestem całkiem nowy w programowaniu na iOS - jak by to działało? Dzięki. –

+0

Znalazłem [to odwołanie na delegatów widoku przewijania] (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/ UIScrollViewDelegate), ale nie rozumiem, jak odzyskać współrzędne dotyku. –

Odpowiedz

4

EDIT: ta metoda działa! Musisz tylko ustawić canCancelContentTouches tak szybko, jak to możliwe (robię to w viewDidLoad).

ORIGINAL ODPOWIEDŹ: Próbowałem nowe podejście, ale niestety nie w pełni działać.

Zamiast dodawać narzędzia do rozpoznawania gestów, podklasy generuję UIScrollView i piszę własne metody touchesBegan, touchesMoved.

ten sposób wiem, gdzie użytkownik dotyka niestety PanGestureRecognizer jest wyzwalanie touchesCancelled każdym uruchomieniu, aby przewinąć nawet po ustawieniu canCancelContentTouches NO.

Czy ktoś wie dlaczego? Znalazłem również this.

14

Jeśli nie chcesz przesłonić standardowego, musisz pozwolić na jednoczesne rozpoznanie obu.

- (void)viewDidLoad:(BOOL)animated 
{ 
    [super viewDidLoad:animated]; 

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
    panRecognizer.delegate = self; 
    [scrollView addGestureRecognizer:panRecognizer]; 
} 

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return TRUE; 
} 


- (void)pan:(id)sender { 
    NSLog(@"Pan"); 
} 
+0

to działa idealnie! –

Powiązane problemy