Swift2 Swift 2:检查触摸中的触摸类型开始

Swift2 Swift 2:检查触摸中的触摸类型开始,swift2,uitouch,Swift2,Uitouch,在Swift 2中,我使用设置的触摸开始方法。现在,在这个方法中,我想检查它是否是一个点击/触摸,一个3D触摸 我试着在第一个UITouch上使用.phase,但结果一无所获。如何检查用户的触摸类型?您不能仅通过查看触摸开始来检查。该方法仅在用户第一次触摸屏幕时调用。系统无法知道之后会发生什么(如果用户再次抬起手指,或者移动手指,或者用力按压等) 您还必须查看touchesMoved和touchesend并检查那里发生了什么 例如: 1) 如果在touchesbeated和touchesend中

在Swift 2中,我使用
设置的
触摸开始
方法。现在,在这个方法中,我想检查它是否是一个点击/触摸,一个3D触摸


我试着在第一个
UITouch
上使用
.phase
,但结果一无所获。如何检查用户的触摸类型?

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

您还必须查看
touchesMoved
touchesend
并检查那里发生了什么

例如:

1) 如果在
touchesbeated
touchesend
中的touchs
locationInView
属性或多或少相同,则触摸是轻触。这两种方法不会完全相同,因为即使用户只是轻触屏幕,手指也会移动一点点

2) 如果触摸的
locationInView
属性在
touchesBegined
toucheSend
中不同,则触摸是平移滑动

3) 如果触摸的“力”属性大于一定量,则触摸为ForceTouch。这仅在触摸移动时可见。在
touchsbegind
中,
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")
        }
    }
}
覆盖功能触摸移动(触摸:设置,带事件:UIEvent?){
guard let touch=touch.first else{return}
如果traitCollection.forceTouchCapability==。可用{
如果touch.force==touch.maximumPossibleForce{
打印(“这是强制触摸”)
}
}
}

请注意,只要用户按下屏幕,就会连续调用此函数。如果您想在检测到强制触摸时执行一次代码,请注意只执行一次代码,直到调用
touchesend

谢谢您的详细回答!然后,我将如何注册ForceTouch并对其采取行动?我不想实现
peek and pop
快速操作
,但我希望我的视图对点击或强制触摸做出响应,然后做一些事情。我在回答中添加了一个示例。