如何检查是否支持Haptic Engine(UIFeedbackGenerator)
我想知道如何检查当前设备上是否有新的iOS 10 API UIFeebackGenerator
。 还有一些我们需要检查的事情:
- 设备需要运行iOS 10.0或更高版本
- 该设备需要是iPhone 7或更高版本
- 需要在“设置”中打开触觉引擎
前两个检查可以使用#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,因此您可以轻松地使用它来生成触觉反馈