How to get current touch point and previous touch point in UIPanGestureRecognizer method?

I am new to iOS, I am using UIPanGestureRecognizer in my project. In which I have a requirement to get current touch point and previous touch point when I am dragging the view. I am struggling to get these two points.

If I use touchesBegan method Instead of using UIPanGestureRecognizer, I could get these two points by the following code:

  • Using UITouch inside a UIScrollView
  • UIButton with hold down action and release action
  • iPhone Objective C: How to get a pixel's color of the touched point on an UIImageView?
  • Touch and drag a UIButton around, but don't trigger it when releasing the finger
  • How to cancel a sequence of UITouch events?
  • How can I pass a gesture recognizer from one view to another
  • - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        CGPoint touchPoint = [[touches anyObject] locationInView:self];
        CGPoint previous=[[touches anyObject]previousLocationInView:self];
    }
    

    I need to get these two points in UIPanGestureRecognizer event fire method. How can I achieve this? please guide me.

    4 Solutions Collect From Internet About “How to get current touch point and previous touch point in UIPanGestureRecognizer method?”

    You can use this:

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

    Store previous location by setting current location if not found and adding current location everytime.

    previousLocation = [recognizer locationInView:self.view]; 
    

    When you link an UIPanGestureRecognizer to an IBAction, the action will get called on every change. The gesture recognizer also provides a property called state which indicates if it’s the first UIGestureRecognizerStateBegan, the last UIGestureRecognizerStateEnded or just an event between UIGestureRecognizerStateChanged.

    To solve your problem, try it like the following:

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

    You may also have a look at the method called translationInView:.

    There is a function in UITouch to get the previous touch in the view

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

    You should instantiate your pan gesture recognizer as follows:

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

    Then you should add panRecognizer to your view:

    [aView addGestureRecognizer:panRecognizer];
    

    The - (void)handlePan:(UIPanGestureRecognizer *)recognizer method will be called while the user interacts with the view. In handlePan: you can get the point touched like this:

    CGPoint point = [recognizer locationInView:aView];
    

    You can also get the state of the panRecognizer:

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