通常,我希望获得在SpriteKit游戏中强制按下(偷看/弹出)图标时产生的触觉反馈。目前,我正在通过以下方式使用3d触摸
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
if touch.force > CGFloat(6.66) {
shootOut ()
}
}
}我希望触觉反馈(类似于窥视或弹出)在if touch.force > CGFloat(6.66)条件满足时发生。如何做到这一点?
发布于 2016-11-08 03:14:16
偷看/弹出触觉反馈可以用iOS 10中的UIPreviewInteraction实现。(关于这一点的docs相当不完整,但他们也在WWDC16 video中谈到了这一点。)这个类是iOS 10中的新类,但在iPhone 6s和iPhone 7上都可以使用。
然而,关于窥视/弹出触觉反馈的想法是,它应该绑定到一个在概念上与窥视/弹出类似的UI。(即使这是一个自定义用户界面,不能“免费”获得窥视/弹出触觉。) Just like on Apple Watch,iPhone上的每个触觉都有一个含义,当你将它们用于设计目的时,这些含义会更清晰。(另一方面,使用UIPreviewInteraction意味着系统会自动为您处理触摸力和何时产生触觉之间的关联。)
因此,如果你正在寻找更通用的触觉反馈,在iOS 10中也有一个单独的应用程序接口,它提供了几种不同类型的触觉,可在更广泛的情况下使用。查看UIFeedbackGenerator的文档,尝试一下它提供的选项,也许你会找到一个适合你的游戏。
UIFeedbackGenerator同时需要iOS 10和iPhone 7--它是专门为新设备的第二代Taptic引擎提供的更丰富的触觉信号词汇而设计的,所以它在iPhone 6s上使用时没有任何影响。
发布于 2016-11-08 07:02:59
您正在寻找UIPreviewInteraction和UIPreviewInteractionDelegate。基本上,它是一个用于强制触摸的手势识别器。(我不明白他们为什么不把它当做手势识别器。)我有一个基于力触摸的“游戏”的example,用户使用力触摸弹出“气泡”。这展示了如何测量和响应作为手势的力量。
发布于 2017-02-06 05:45:47
if touch.force > CGFloat(6.66) {您可能希望使用touch.maximumPossibleForce而不是硬编码常量:
touch.force / touch.maximumPossibleForce检查强制触摸是否可用也可能是一个好主意:
if(is3dTouchAvailable(traitCollection: self.view!.traitCollection)) {
//...
}更多详细信息和代码示例http://www.mikitamanko.com/blog/2017/02/01/swift-how-to-use-3d-touch-introduction/
至于与图标强制触摸完全相同的“效果”,如下所示:
let generator = UIImpactFeedbackGenerator(style: .heavy)
generator.prepare()
generator.impactOccurred()查看有关检查触觉反馈的支持和回退的更多详细信息:http://www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/
https://stackoverflow.com/questions/40470412
复制相似问题