使用 TouchesMoved 跟踪两个手指

Posted

技术标签:

【中文标题】使用 TouchesMoved 跟踪两个手指【英文标题】:tracking two fingers with TouchesMoved 【发布时间】:2009-08-10 16:49:28 【问题描述】:

假设我有两根手指触摸 iPhone 的屏幕,但只有一根手指在移动。

TouchesMoved 将只显示一根手指(事件)。

我如何知道 TouchesMoved 指的是两个手指中的哪一个?

【问题讨论】:

【参考方案1】:

不幸的是,如果您仔细想想,没有“确定的”方法可以将一根手指与一个触摸点相关联。毕竟,你的手指并没有 iPhone 能够采样的全球唯一 ID。

您需要做的是记录“先前”位置,这对于管理捏合和其他事情很有用 - 并根据与先前触摸集的接近程度标记每个手指。

【讨论】:

谢谢,但我发现有一种方法可以追踪手指...alexcurylo.com/blog/2008/11/24/snippet-pinch-and-stretch【参考方案2】:

我发现可以做我想做的事。只需在 iTunesU 上查看斯坦福大学的 CS193P 课程。

【讨论】:

【参考方案3】:

首先,在您的UIView 上启用多点触控:

self.multipleTouchEnabled = true

然后为UITouch 对象保留一个字典。相同的UITouch 对象在touchesBegantouchesMovedtouchesEnded 中传递:

var touchTypes = Dictionary<UITouch, Int>()

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) 
    for touchObject in touches 
        touchTypes.updateValue(i, forKey: touch as UITouch) //determine i for your own implementation
    


override func touchesMoved(touches: NSSet, withEvent event: UIEvent) 
    let type = touchTypes[touch] //depending on this value, do something


override func touchesEnded(touches: NSSet, withEvent event: UIEvent) 
    for touchObject in touches 
        touchTypes.removeValueForKey(touchObject as UITouch)
    

【讨论】:

【参考方案4】:

您从TouchesBegan 方法中以NSSet * 的形式获得触摸,您需要循环所有触摸并将它们放入您的应用程序的上下文中,以便稍后识别它们。

如果您描述了您的意图,那么帮助您会容易得多......

【讨论】:

我有一张我想移动的图像。该图像可以用一根手指(一个人)或两根手指(两个人)移动。想象一个人 A 将他的手指从 A1 点移动到 A2 点。如果有一个人 B,它会将他的手指从 B1 点移动到 B2 点。如果只有一个人在场,则图像会移动点 A1 和 A2 的坐标之间的变化。如果两个人在移动,则图像移动两个手指位置变化的总和。所以,我需要跟踪每个手指移动了多少。 我有类似的问题,touches 在我的情况下总是包含单个对象。【参考方案5】:

你写的

TouchesMoved 只会显示一根手指 (事件)。

但事实并非如此:只要两根手指触摸屏幕,并且至少其中一根手指移动,您就会得到带有双指touchesMoved。 p>

如果临时拿起一根手指,您可能会用一根手指接到一些touchesMoved 电话,因此您必须决定如何处理。

【讨论】:

以上是关于使用 TouchesMoved 跟踪两个手指的主要内容,如果未能解决你的问题,请参考以下文章

iOS 如何使用 touchesMoved 移动两个图像?

在 Swift 中使用 touchesMoved 跟踪触摸

通过多个 UIView 注册触摸

iOS 手势大全

从 TouchesMoved 获取子视图参考

Objective C 触摸事件问题