如何检查是否支持Haptic Engine(UIFeedbackGenerator)

我想知道如何检查当前设备上是否有新的iOS 10 API UIFeebackGenerator 。 还有一些我们需要检查的事情:

  1. 设备需要运行iOS 10.0或更高版本
  2. 该设备需要是iPhone 7或更高版本
  3. 需要在“设置”中打开触觉引擎

前两个检查可以使用#available(iOS 10, *)语句和(hacky)设备检测来实现,但后者似乎不可检查。

有人知道这方面的解决方案吗? 或许我们需要为此提交Apple Radar。 谢谢!

基于Apple的UIFeedbackGenerator文档 ,iOS 之UIFeedbackGenerator声音适合您。

请注意,调用这些方法不会直接播放触觉。 相反,它会通知系统事件。 然后,系统基于设备 ,应用程序的状态,剩余的电池电量以及其他因素来确定是否播放触觉

例如,目前仅播放触觉反馈:

在具有支持的Taptic Engine(iPhone 7和iPhone 7 Plus)的设备上。

当应用程序在前台运行时。

启用“系统触觉”设置时。

即使您不需要担心检查设备是否可以进行触觉反馈,您仍然需要确保它仅在iOS 10或更高版本中调用,因此您可以通过以下方式实现:

  if #available(iOS 10,*) { // your haptic feedback method } 

以下是iOS 10中各种触觉反馈选项的快速摘要 。

有一些无证的“私事”:

 UIDevice.currentDevice().valueForKey("_feedbackSupportLevel"); 

对于具有触觉反馈的设备,它会返回2 – iPhone 7/7 +,因此您可以轻松地使用它来生成触觉反馈:

 let generator = UIImpactFeedbackGenerator(style: .heavy) generator.prepare() generator.impactOccurred() 

为iPhone 6S 返回1 ,这是生成taptic的后备:

 import AudioToolbox AudioServicesPlaySystemSound(1519) // Actuate `Peek` feedback (weak boom) AudioServicesPlaySystemSound(1520) // Actuate `Pop` feedback (strong boom) AudioServicesPlaySystemSound(1521) // Actuate `Nope` feedback (series of three weak booms) 

并为iPhone 6或更早版本的设备返回0 。 由于它是一种无证件的东西,它可能在审查阶段阻止你,虽然我能够通过审查并提交带有这种检查的应用程序。

更多细节: http//www.mikitamanko.com/blog/2017/01/29/haptic-feedback-with-uifeedbackgenerator/

您知道您的设备支持触觉振动效果与否,代码如下,

 UIDevice.currentDevice().valueForKey("_feedbackSupportLevel"); 

这些方法似乎回归:

  • 0 = Taptic不可用

  • 1 =第一代(在iPhone 6s上测试)…不支持UINotificationFeedbackGenerator等。

  • 2 =第二代(在iPhone 7上测试)……它确实支持它。

对于具有触觉反馈的设备(iPhone 7/7 +或更高版本),它会返回2,因此您可以轻松地使用它来生成触觉反馈