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

时间:2015-01-02 18:00:55

标签: ios swift uitouch

我一直在研究各地,无法找到ios中每个触点的唯一标识符。我也想知道如何在swift中访问它,但无法在其上找到任何文档。

1 个答案:

答案 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。

现在你可以为这些触摸点指定自己的指针,因为它们都属于同一个触摸事件。