2009-08-10 75 views
4

假设我有两个手指触摸iPhone的屏幕,但只有一个正在移动。用TouchesMoved跟踪两个手指

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

我怎么知道,两根手指的TouchesMoved所指呢?

回答

1

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

1

不幸的是如果你想想看有没有“权威”的方式来一个手指有一个触摸点相关联。毕竟,你的手指并没有全球唯一的ID,即iPhone有能力进行抽样。

你需要做的是保持“前”位置的记录,这是管理捏和其他东西反正有用的 - 和标记基于接近设定之前接触每一个手指。

+0

感谢,但我发现有一种方法来跟踪手指... http://www.alexcurylo.com/blog/2008/11/24/snippet-pinch-and-stretch/ – SpaceDog 2009-08-12 10:15:51

0

您从TouchesBegan方法中获得NSSet *的触动位置,您需要遍历所有触摸并将它们放到应用程序的上下文中,以便稍后识别它们。

它会一直容易得多,如果你描述你的意图,以帮助您...

+0

我有一张我想要移动的图像。该图像可以通过一个手指(一个人)或两个手指(两个人)来移动。 想象一下,人A将他的手指从A1点移动到A2点。如果有人B,则他的手指从B1点移动到B2。 如果只有一个人存在,则图像被移动到点A1和A2的坐标之间的变化。如果两个人在移动,则图像移动两个手指位置变化的总和。所以,我需要跟踪每个手指移动的程度。 – SpaceDog 2009-08-10 20:29:20

+0

我有一个类似的问题,在我的情况下'touches'集合总是包含单个对象。 – kelin 2017-02-16 19:59:47

0

你写

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

,但这并非事实:只要两根手指触摸屏幕,并且它们中的至少一个动作,你会得到一个touchesMoved手指。

如果一个手指被暂时回升,你可能会得到一些touchesMoved电话只用一个手指,所以你必须决定做什么有关。

+0

谢谢!我会看看。 – SpaceDog 2009-08-12 10:09:48

1

首先,在你的UIView使多点触控:

self.multipleTouchEnabled = true 

然后保持一个字典为UITouch对象。同样UITouch对象被传递touchesBegantouchesMoved,并且touchesEnded

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) 
    } 
}