8

Sono nuovo per iOS, sto usando UIPanGestureRecognizer nel mio progetto. In cui ho il requisito di ottenere il punto di contatto corrente e il punto di contatto precedente quando trascino la vista. Sto lottando per ottenere questi due punti.Come ottenere il punto di tocco attuale e il punto di tocco precedente nel metodo UIPanGestureRecognizer?

Se uso touchesBegan metodo Invece di usare UIPanGestureRecognizer, ho potuto ottenere questi due punti dal seguente codice:

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

ho bisogno di ottenere questi due punti in UIPanGestureRecognizer metodo evento fuoco. Come posso raggiungere questo obiettivo? per favore guidami

risposta

15

È possibile utilizzare questo:

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

Conservare posizione precedente impostando posizione corrente se non trovato e l'aggiunta di posizione corrente ogni volta.

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

Quando si collega un UIPanGestureRecognizer a un IBAction, l'azione verrà chiamato su ogni cambiamento. Il riconoscitore di gesti fornisce anche una proprietà denominata state che indica se è il primo UIGestureRecognizerStateBegan, l'ultimo UIGestureRecognizerStateEnded o solo un evento tra UIGestureRecognizerStateChanged.

Per risolvere il problema, provare come il seguente:

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

Si può anche avere uno sguardo al metodo chiamato translationInView:.

0

Si dovrebbe istanziare la pentola gesto riconoscitore come segue:

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

Poi si dovrebbe aggiungere panRecognizer alla vista:

[aView addGestureRecognizer:panRecognizer]; 

Il metodo - (void)handlePan:(UIPanGestureRecognizer *)recognizer sarà chiamato mentre l'utente interagisce con la vista . In handlePan: è possibile ottenere il punto toccato in questo modo:

CGPoint point = [recognizer locationInView:aView]; 

Si può anche ottenere lo stato del panRecognizer:

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

In teoria questo funzionerebbe ... ma in pratica non ... – Sakiboy

0

C'è una funzione in UITouch per ottenere il contatto precedente nella vista

  • (CGPoint) locationInView: vista (UIView *);
  • (CGPoint) previousLocationInView: vista (UIView *);
Problemi correlati