8

Jestem nowy na iOS, używam UIPanGestureRecognizer w moim projekcie. W którym mam wymóg uzyskania aktualnego punktu dotyku i poprzedniego punktu kontaktu, gdy przeciągam widok. Staram się uzyskać te dwa punkty.Jak uzyskać bieżący punkt dotykowy i poprzedni punkt dotykowy w metodzie UIPanGestureRecognizer?

Jeśli używam touchesBegan metodę zamiast korzystania UIPanGestureRecognizer, mogę dostać te dwa punkty według następującego kodu:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    CGPoint touchPoint = [[touches anyObject] locationInView:self]; 
    CGPoint previous=[[touches anyObject]previousLocationInView:self]; 
} 

Muszę dostać te dwa punkty w UIPanGestureRecognizer metody pożaru zdarzenia. Jak mogę to osiągnąć? proszę, prowadź mnie.

Odpowiedz

15

Można to wykorzystać:

CGPoint currentlocation = [recognizer locationInView:self.view]; 

Store poprzedniej lokalizacji poprzez ustawienie bieżącej lokalizacji, jeśli nie znaleziono i dodanie bieżącej lokalizacji za każdym razem.

previousLocation = [recognizer locationInView:self.view]; 
3

Gdy połączyć UIPanGestureRecognizer do IBAction, akcja zostanie sprawdzony na każdej zmianie. Rozpoznawanie gestów zapewnia również właściwość o nazwie state, która wskazuje, czy jest to pierwsza UIGestureRecognizerStateBegan, ostatnia UIGestureRecognizerStateEnded lub tylko zdarzenie między UIGestureRecognizerStateChanged.

Aby rozwiązać problem, spróbuj tak:

- (IBAction)panGestureMoveAround:(UIPanGestureRecognizer *)gesture { 
    if ([gesture state] == UIGestureRecognizerStateBegan) { 
     myVarToStoreTheBeganPosition = [gesture locationInView:self.view]; 
    } else if ([gesture state] == UIGestureRecognizerStateEnded) { 
     CGPoint myNewPositionAtTheEnd = [gesture locationInView:self.view]; 
     // and now handle it ;) 
    } 
} 

Można też rzucić okiem na metodzie zwanej translationInView:.

0

Należy instancję patelnię gest rozpoznawania następująco:

UIPanGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 

Następnie należy dodać panRecognizer do widzenia:

[aView addGestureRecognizer:panRecognizer]; 

Sposób - (void)handlePan:(UIPanGestureRecognizer *)recognizer zostanie wywołana, gdy użytkownik wchodzi w interakcję z widoku . W handlePan: można uzyskać punkt dotknął tak:

CGPoint point = [recognizer locationInView:aView]; 

Można również uzyskać stan panRecognizer:

if (recognizer.state == UIGestureRecognizerStateBegan) { 
    //do something 
} else if (recognizer.state == UIGestureRecognizerStateEnded) { 
    //do something else 
} 
+0

Teoretycznie to działałoby ... ale w praktyce nie ... – Sakiboy

0

Istnieje funkcja w UITouch uzyskać poprzednią dotyk w widoku

  • (CGPoint) locationInView: (UIView *) widok;
  • (CGPoint) previousLocationInView: (UIView *) widok;
Powiązane problemy