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

标签 iphone multi-touch gesture-recognition pinch

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

最佳答案

您需要使用一些基本数学知识自己实现它。

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

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

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

用于获取距离的数学方程称为 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)。

关于iphone - 如何在iPhone上进行捏合手势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107573/

相关文章:

android-imageview - 将 ScaleGestureDetector 与 GestureDetector 一起使用?

iphone - EntryElement 在 Monotouch.Dialog 上可以是只读的吗?

iphone - 为什么我应该使用 float ?

iPhone - 如何检测 iPhone 版本?

android - 使用手势识别数字

algorithm - 使用网络摄像头跟踪手势

iphone - 如何计算 iPhone、iPad 和 Android 设备上触摸点的直径?

iphone - CoreLocation/Mapkit 高度

java - 将手指滑入按钮 android

c# - 确定多用户、多点触控应用程序中的用户意图