Swift 2:检查 touchesBegan 中的触摸类型

Swift 2: check for type of touch in touchesBegan

在 Swift 2 中,我有 touchesBegan 方法和 Set<UITouch>。现在,在方法中我想检查它是否是 tap/touch、3D touch..

我尝试在第一个 UITouch 上使用 .phase,但没有任何结果。我如何检查用户进行了何种触摸?

您无法通过单独查看 touchesBegan 来检查。该方法仅在用户首次触摸屏幕时调用。系统无法知道之后会发生什么(如果用户再次抬起手指,或者移动手指,或者用力按压等)。

您还必须查看 touchesMovedtouchesEnded 并检查那里发生了什么。

例如:

1) 如果触摸 locationInView 属性 与 touchesBegantouchesEnded。不会完全一样,因为即使用户只是点击屏幕,手指也会移动一点点。

2) 触摸是 PanSwipe 如果触摸 locationInView 属性 不同touchesBegantouchesEnded

3) 如果触摸 'force' 属性 大于一定数量,则触摸是 ForceTouch。这仅在 touchesMoved 中可见。在 touchesBegan 中,force 属性 将始终是 0。当然 force 只能在提供该功能的设备上使用。

如果您想自己检测 ForceTouch,您可以这样做:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
    guard let touch = touches.first else { return }
    if traitCollection.forceTouchCapability == .Available {
        if touch.force == touch.maximumPossibleForce {
            print("This is a force touch")
        }
    }
}

请注意,只要用户按下屏幕,就会持续调用此方法。如果您想在检测到强制触摸时执行一次代码,请注意在调用 touchesEnded 之前只执行一次代码。