检查设备是否支持iOS 10中的UIFeedbackGenerator

Kri*_*lci 15 iphone ios taptic-engine ios10

在iOS 10中,有一个新的api允许开发人员使用tapic引擎UIFeedbackGenerator.

虽然这个api在iOS 10中可用,但它仅适用于新设备,iPhone 7和7 plus.它不适用于包括6S或6S Plus在内的旧设备,即使是那些具有tapic引擎的设备也是如此.我猜7和7 plus上的taptic引擎是一个不同的更强大的引擎.

我似乎无法找到一种方法来查看设备是否支持使用新的api.我想用taptic代码替换一些振动代码,这是有意义的.

编辑:

为搜索目的添加3个具体子类:UIImpactFeedbackGenerator UINotificationFeedbackGenerator UISelectionFeedbackGenerator

编辑2:

我有一个理论,但没有iPhone 7设备来测试它,所以如果你有一个,请试一试.UIFeedbackGenerator有一个名为prepare()的方法.当打印出UIImpactFeedbackGenerator的一个实例时,我注意到它打印了一个名为"prepared"的属性,它将显示0.在模拟器或iPhone 6S上调用prepare()然后打印出实例仍然显示准备为0.可以有人打电话准备()来自iPhone7的UIImpactFeedbackGenerator实例,然后将实例打印到控制台以查看prepare是否设置为1?此值未公开,但可能有一种方法可以使用私有api获取此信息.

Ben*_*ild 14

所以,显然这可以通过私有API调用来完成.

Objective-C的:

[[UIDevice currentDevice] valueForKey:@"_feedbackSupportLevel"];

迅速:

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


......这些方法似乎回归:

  • 0 = Taptic不可用
  • 1=第一代(在iPhone 6s上测试)......不支持UINotificationFeedbackGenerator等等
  • 2=第二代(在iPhone 7上测试)......它确实支持它.

不幸的是,这里有两个警告:

  1. 在App Store的App Review期间使用这些可能会让Apple拒绝您的应用,但目前似乎没有任何其他方式.
  2. 我们不知道实际值代表什么.

特别感谢Tim OliverSteve TS帮助用不同的设备进行测试.https://twitter.com/TimOliverAU/status/778105029643436033

  • 这不再适用于iOS 11.会导致崩溃,因为"此类与密钥_feedbackSupportLevel."不符合密钥值编码. (4认同)