ios中每个触摸点是否有指针

Is there a pointer for each touch point in ios

我到处研究,找不到ios中每个接触点是否有唯一标识符。我还想知道如何在 swift 中访问它,但找不到任何相关文档。

不是真正针对每个点,而是针对每次触摸。要访问它们需要您自己的触摸处理,例如在发生触摸的 UIView 或其 ViewController 中。这只需要您为 touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent: 编写自己的方法。

touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent: 被 iOS 调用时,它们会在 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,当您向字典询问相应的对象时,字典将 return 为零。

现在您可以将自己的指针分配给那些触摸点,知道它们都属于同一个触摸事件。