如何在iPhone上进行捏合手势?

时间:2009-07-10 03:43:50

标签: iphone multi-touch gesture-recognition pinch

如何在iPhone上实现捏合手势?我熟悉在iPhone上使用触摸事件,但我非常懒,并且不想重新发明像PINCH手势那样普遍的东西...源代码或其链接会有所帮助。

4 个答案:

答案 0 :(得分:8)

你需要使用一些基本的数学来实现它。

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

这些是您需要在应用程序中实现的委托方法。

您需要获取两次触摸之间的距离,然后根据自己的代码计算距离的变化。

用于获得距离的数学方程式称为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;
}

修改 我在之前的回答中犯了一个错误......自从我完成了任何一种数学运算以来已经有一段时间了。

如果你没有平方根结果,你将无法获得各点之间的真实距离。这称为计算两个向量之间的大小。

这是正确的方法。如果你想省略sqrt,你将没有两点之间的确切距离。

如果您没有找到答案,那么您的代码将会起作用,但它将使用远大于实际值的测量值。因此,将来如果你需要获得两点之间的距离,它将返回90000而不是实际像素距离300px。

答案 1 :(得分:8)

非常确定此处提供的解决方案已经过时,支持在iOS 3.2及更高版本中使用新的UIPinchGestureRecognizer类。

答案 2 :(得分:6)

嗯......似乎有些人对如何使用基本数学非常困惑。点积完全没有问题,只是混淆了问题。 2个向量之间的点prod用于计算它们之间的角度。

你实际上需要使用pythagorus定理。点与点之间的距离没什么关系 - 只有pythagorous!

答案 3 :(得分:1)

如果您正在寻找捏手势的简单代码示例,我在示例应用程序I describe here中使用Brock描述的方法(在应用程序的倒数第二个和最后一个版本中)页)。在该示例中,捏合手势用于缩放几个核心动画层。

所有他描述的距离计算只是在两点之间应用的毕达哥拉斯定理(X和Y距离作为直角三角形的两个面)。