11

如何在 iPhone 上实现捏合手势?我熟悉在 iPhone 上使用触摸事件,但我非常懒惰,不想为像 PI​​NCH 手势这样普遍的东西重新发明轮子……源代码或链接会很有帮助。

4

4 回答 4

8

您需要使用一些基本的数学方法自己实现它。

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

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

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

您用来获取距离的数学方程式称为点积

我只想指出,他们在引用的教程中使用的方程式是不正确的。我已对其进行了更新,以包含本教程中遗漏的绝对值。

这是点积:

- (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 之类的值,而不是 300 像素的实际像素距离。

于 2009-07-10T03:50:28.463 回答
8

很确定这里介绍的解决方案已经过时,有利于在 iOS 3.2 及更高版本中使用新的 UIPinchGestureRecognizer 类。

于 2010-10-25T18:18:40.617 回答
6

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

您实际上需要使用毕达哥拉斯定理。点与查找点之间的距离无关 - 只是毕达哥拉斯!

于 2009-11-12T15:28:00.903 回答
1

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

就距离计算而言,他所描述的只是在两点之间应用的勾股定理(X 和 Y 距离作为直角三角形的两个面)。

于 2009-07-10T13:15:27.090 回答