8

Ich bin neu in iOS, ich bin mit UIPanGestureRecognizer in meinem Projekt. In dem ich eine Anforderung habe, den aktuellen Berührungspunkt und vorherigen Berührungspunkt zu erhalten, wenn ich die Ansicht ziehe. Ich kämpfe um diese zwei Punkte.Wie aktuellen Berührungspunkt und vorherigen Berührungspunkt in UIPanGestureRecognizer Methode zu bekommen?

Wenn ich touchesBegan Methode Statt UIPanGestureRecognizer zu verwenden, kann ich diese beiden Punkte durch den folgenden Code erhalten:

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

Ich brauche diese beiden Punkte in UIPanGestureRecognizer Ereignisse Feuer Methode zu erhalten. Wie kann ich das erreichen? Bitte führen Sie mich.

Antwort

15

Sie können diese verwenden:

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

Shop vorherige Position von aktuellem Standort einstellen, wenn nicht gefunden und das Hinzufügen von aktuellem Standort jeden Mals.

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

Wenn Sie ein UIPanGestureRecognizer zu einem IBAction verknüpfen, wird die Aktion bei jeder Änderung aufgerufen. Die Gestenerkenner bieten auch eine Eigenschaft namens state, das anzeigt, ob es die ersten UIGestureRecognizerStateBegan ist, die letzten UIGestureRecognizerStateEnded oder nur ein Ereignis zwischen UIGestureRecognizerStateChanged.

Ihr Problem zu lösen, versuchen Sie es wie folgt aus:

- (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 ;) 
    } 
} 

Sie können auch einen Blick auf die translationInView: genannte Methode haben.

0

Sie sollten Ihre pan Gestenerkenner instanziiert wie folgt:

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

Dann sollten Sie panRecognizer zu Ihrer Ansicht hinzuzufügen:

[aView addGestureRecognizer:panRecognizer]; 

Die - (void)handlePan:(UIPanGestureRecognizer *)recognizer Methode wird aufgerufen, während der Benutzer mit dem Blick in Wechselwirkung tritt . In handlePan: Sie erhalten den Punkt kann so berührt:

CGPoint point = [recognizer locationInView:aView]; 

Sie können auch den Zustand des panRecognizer erhalten:

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

Theoretisch würde dies funktionieren ... aber in der Praxis funktioniert es nicht ... – Sakiboy

0

Es gibt eine Funktion in UITouch die vorherige Note in der Ansicht zu erhalten

  • (CGPoint) locationInView: (UIView *) Ansicht;
  • (CGPoint) previousLocationInView: (UIView *) Ansicht;