AndroidDev
AndroidDev

Reputation: 21237

UIPanGestureRecognizer get swipe distance in pixels

I'm trying to track the horizontal distance that a user has swiped using a UIPanGestureRecognizer, but I'm having difficulty interpreting the results. Here is the code that I am using:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer {

    CGPoint startLocation;

    if (recognizer.state == UIGestureRecognizerStateBegan) {
        startLocation = [recognizer locationInView:self.view];
    }

    if (recognizer.state == UIGestureRecognizerStateEnded) {
        CGPoint stopLocation = [recognizer locationInView:self.view];
        CGFloat dx = stopLocation.x - startLocation.x;
        NSLog(@"dx: %f", dx);
    }
}

If I swipe left-to-right, I get output something like this:

dx: 50328911327402404790403072.000000

My screen is only 320 pixels wide, so my end result cannot be greater than 320. Is there a problem with my code or am I just interpreting this number incorrectly? How can I get this value stated in pixels? Thanks!

Upvotes: 2

Views: 1872

Answers (2)

Rameshwar Gupta
Rameshwar Gupta

Reputation: 791

You can use UIPanGestureRecognizer as below:-

CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.view];

if ([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {
    firstX = [[sender view] center].x;
    firstY = [[sender view] center].y;
}

translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY);

[[sender view] setCenter:translatedPoint];

if ([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
    CGFloat velocityX = (0.2*[(UIPanGestureRecognizer*)sender velocityInView:self.view].x);


    CGFloat finalX = translatedPoint.x + velocityX;
    CGFloat finalY = firstY;

Upvotes: 0

Aaron Brager
Aaron Brager

Reputation: 66242

startLocation doesn't persist after handlePan: returns, so you're getting garbage.

Either declare startLocation as static or save it in an instance variable / property.

Upvotes: 3

Related Questions