我一直在研究各地,无法找到ios中每个触点的唯一标识符。我也想知道如何在swift中访问它,但无法在其上找到任何文档。
答案 0 :(得分:2)
不是每个点都有,但每次触摸都是如此。要访问它们需要您自己的触摸处理,例如在触摸发生的UIView或其ViewController中。这只需要您为touchesBegan:withEvent:
,touchesMoved:withEvent:
和touchesEnded:withEvent:
编写自己的方法。
当iOS调用touchesBegan:withEvent:
,touchesMoved:withEvent:
和touchesEnded:withEvent:
时,他们会报告NSSet
中的触摸。该集合中的每个成员都是指向触摸数据结构的唯一指针,如果您希望随时间过滤触摸,则应将其用作NSMutableDictionary
中的键。
与touchesBegan
中的内容类似,当您第一次遇到触摸时:
var pointDict: [String?: NSObject?] = [:]
...
func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// Regular multitouch handling.
for touch in touches.allObjects as UITouch {
// Create a new key from the UITouch pointer:
let key = \(touch)
// Put the point into the dictionary as an NSValue
pointDict.setValue(NSValue(CGPoint: touch.locationInView(myView)), forKey:key)
}
}
现在在touchesMoved
中,你需要根据存储的密钥检查指针:
func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
for touch in touches.allObjects as UITouch {
// Create a new key from the UITouch pointer:
let key = \(touch)
// See if the key has been used already:
let oldPoint = pointDict[key]
if oldPoint != nil {
(do whatever is needed to continue the point sequence here)
}
}
}
如果已经有一个使用与其键相同的touchID的条目,则会获得该键的存储对象。如果以前的触摸没有使用该ID,则当您要求相应对象时,字典将返回nil。
现在你可以为这些触摸点指定自己的指针,因为它们都属于同一个触摸事件。