如何跟踪多个触摸

嘿,我有一个良好的代码在我的触动感动了@Sam_M给我。

我试图基本上跟踪移动时多个手指的位置。 像手指1在这里,手指2在那里。 因此,现在它将打印当前在视图和位置上的手指/触摸的数量,但是它不会分别跟踪两个单独的手指。 我环顾了仅有的3个其他问题,在计算器上。 但没有一个给了我一个很好的结果,我可以迅速实施。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch: UITouch in event!.allTouches()! { for (index,touch) in touches.enumerate() { let ptTouch = touch.locationInNode(self.view) print("Finger \(index+1): x=\(pTouch.x) , y=\(pTouch.y)") } } 

}

 override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { for touch: UITouch in event!.allTouches()! { for (index,touch) in touches.enumerate() { let ptTouch = touch.locationInNode(self.view) print("Finger \(index+1): x=\(pTouch.x) , y=\(pTouch.y)") } } } 

在屏幕上时,每个手指的触摸对象将与相同的内存地址保持一致。 您可以通过将触摸对象的地址存储在数组中,然后与该数组进行比较来准确了解哪个手指正在移动,从而可以跟踪多点触摸场景中的各个手指。

 var fingers = [String?](count:5, repeatedValue: nil) override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { super.touchesBegan(touches, withEvent: event) for touch in touches{ let point = touch.locationInView(self.view) for (index,finger) in fingers.enumerate() { if finger == nil { fingers[index] = String(format: "%p", touch) print("finger \(index+1): x=\(point.x) , y=\(point.y)") break } } } } override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { super.touchesMoved(touches, withEvent: event) for touch in touches { let point = touch.locationInView(self.view) for (index,finger) in fingers.enumerate() { if let finger = finger where finger == String(format: "%p", touch) { print("finger \(index+1): x=\(point.x) , y=\(point.y)") break } } } } override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { super.touchesEnded(touches, withEvent: event) for touch in touches { for (index,finger) in fingers.enumerate() { if let finger = finger where finger == String(format: "%p", touch) { fingers[index] = nil break } } } } override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) { super.touchesCancelled(touches, withEvent: event) guard let touches = touches else { return } touchesEnded(touches, withEvent: event) } 

触摸是一个手指。 手指是一个触摸。 您可以通过识别触摸来识别手指; 只要手指触摸屏幕,对于特定手指的触摸将是相同的对象 。 要获取特定UITouch的唯一标识符,请使用其内存地址,如下所示:

 let uuid = String(format: "%p", theTouch) 

您可以将每个触摸的唯一标识符存储在属性中。 但不要存储触摸本身; 苹果禁止它。