Swift 2:检查 touchesBegan 中的触摸类型
Swift 2: check for type of touch in touchesBegan
在 Swift 2 中,我有 touchesBegan
方法和 Set<UITouch>
。现在,在方法中我想检查它是否是 tap/touch、3D touch..
我尝试在第一个 UITouch
上使用 .phase
,但没有任何结果。我如何检查用户进行了何种触摸?
您无法通过单独查看 touchesBegan
来检查。该方法仅在用户首次触摸屏幕时调用。系统无法知道之后会发生什么(如果用户再次抬起手指,或者移动手指,或者用力按压等)。
您还必须查看 touchesMoved
和 touchesEnded
并检查那里发生了什么。
例如:
1) 如果触摸 locationInView
属性 与 touchesBegan
和 touchesEnded
。不会完全一样,因为即使用户只是点击屏幕,手指也会移动一点点。
2) 触摸是 Pan 或 Swipe 如果触摸 locationInView
属性 不同touchesBegan
和 touchesEnded
。
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
之前只执行一次代码。
在 Swift 2 中,我有 touchesBegan
方法和 Set<UITouch>
。现在,在方法中我想检查它是否是 tap/touch、3D touch..
我尝试在第一个 UITouch
上使用 .phase
,但没有任何结果。我如何检查用户进行了何种触摸?
您无法通过单独查看 touchesBegan
来检查。该方法仅在用户首次触摸屏幕时调用。系统无法知道之后会发生什么(如果用户再次抬起手指,或者移动手指,或者用力按压等)。
您还必须查看 touchesMoved
和 touchesEnded
并检查那里发生了什么。
例如:
1) 如果触摸 locationInView
属性 与 touchesBegan
和 touchesEnded
。不会完全一样,因为即使用户只是点击屏幕,手指也会移动一点点。
2) 触摸是 Pan 或 Swipe 如果触摸 locationInView
属性 不同touchesBegan
和 touchesEnded
。
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
之前只执行一次代码。