如何在iPhone上实现捏合手势?我熟悉在iPhone上使用触摸事件,但是我非常懒惰,不想在如此普遍的捏合手势中重新发明轮子...提供源代码或相关链接将会很有帮助。
如何在iPhone上实现捏合手势?我熟悉在iPhone上使用触摸事件,但是我非常懒惰,不想在如此普遍的捏合手势中重新发明轮子...提供源代码或相关链接将会很有帮助。
您需要使用一些基本的数学知识自行实现。
(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;
}
编辑: 我在之前的回答中犯了一个错误...已经有一段时间没有做过这种数学计算了。
如果你不对结果进行平方根运算,就无法得到两点之间的真实距离。这被称为计算两个向量之间的大小。
这是正确的方法。如果你想省略平方根运算,你将不能得到两点之间的确切距离。
如果你不对答案进行平方运算,你的代码会工作,但使用的测量值比实际值要大得多。因此,如果你将来需要获取两点之间的距离,它将返回类似于90000而不是实际像素距离300px的东西。
可以肯定的是,这里提出的解决方案已经过时了,现在iOS 3.2及以上版本推荐使用新的UIPinchGestureRecognizer类来实现。
嗯……似乎有些人在如何使用基本数学方面非常困惑。点积完全无关紧要,只会让问题更加混乱。两个向量之间的点积用于计算它们之间的角度。
实际上,您需要使用勾股定理。点积与寻找点之间距离没有任何关系——只与勾股定理有关!
如果你正在寻找一个简单的捏合手势代码示例,我使用了Brock在这个我在这里描述的示例应用程序中描述的方法(在该页面上倒数第二和最后版本的应用程序中使用了捏合手势来缩放几个核心动画层)。
就距离计算而言,他所描述的只是在两点之间应用勾股定理(以X和Y距离作为直角三角形的两个面)。