2009-07-10 142 views
11

如何在iPhone上实现捏手势?我很熟悉在iPhone上使用触摸事件,但我非常懒惰,不想重新发明轮子,使其与PINCH手势一样普遍......源代码或链接将有所帮助。如何在iPhone上捏手势?

+1

看起来这个样品在捏缩放http://cocoabugs.blogspot.com/2011/03/pinch-zoom-using-uipinchgesturerecogniz.html – 2011-03-10 02:47:16

回答

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。

+0

嗯......不知道你引用的'点积'链接多少会派上用场,但至少要感谢回复...... – RexOnRoids 2009-07-10 04:01:21

+0

没有它,你无法计算两次触摸之间的距离。这是至关重要的。 – 2009-07-10 04:07:35

+0

Thx - 源代码在这种情况下更容易理解..我没有准备坐下来试图吸收整个wiki页面上复杂的'点积'LOL – RexOnRoids 2009-07-10 04:10:33

1

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

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

6

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

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

8

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