Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to do pinch gestures on the iPhone?

How does one implement pinch gestures on the iPhone? I'm familiar with using touch events on the iPhone but I'm extremely lazy and don't want to re-invent the wheel for something as widespread as PINCH gestures...Source code or links thereto would be helpful.

like image 348
RexOnRoids Avatar asked Jul 10 '09 03:07

RexOnRoids


1 Answers

You need to implement it yourself using some basic math.

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

Those are the delegate methods that you need to implement in your application.

You need to get the distance between the two touches, then calculate the changes in distance in your own code.

The mathematical equation you use to get the distance is called the dot product

I just want to point out that the equation they use in the cited tutorial is incorrect. I have updated it to include the absolute value that is missed in the tutorial.

This is the dot product:

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint
{
    float xDist = fromPoint.x - toPoint.x;
    float yDist = fromPoint.y - toPoint.y;

    float result = sqrt( pow(xDist,2) + pow(yDist,2) );
    return result;
}

Edit: I made a mistake in my previous answer....it's been a while since I've done any of that kind of math.

If you don't square root the result, you won't get the true distance between the points. This is called calculating the magnitude between two vectors.

This is the proper way to do it. If you want to omit the sqrt, you will not have the exact distance between the two points.

If you don't square the answer, your code will work but it will be using measurements that are much larger than the actual values. So in the future if you need to get the distance between the two points, it will return something like 90000 instead of the actual pixel distance which would be 300px.

like image 101
Sanyifejű Avatar answered Oct 16 '22 10:10

Sanyifejű