我正在使用某些UIGestures(特别是强制触摸)。我已完成所有工作,其他UI更新/动画均在强制触摸下正常工作。但是,我想在硬按上添加触觉反馈。令我沮丧的是,这段代码无法正常工作。该函数被调用,界面已更新,但没有触觉反馈。我在这里想念什么吗?权限,功能等?
@objc func forceTouchHandler(_ sender: ForceTouchGestureRecognizer) {
print("force touch")
UINotificationFeedbackGenerator().notificationOccurred(.success)
self.updateInterface()
}
在此先感谢您的反馈。
答案 0 :(得分:2)
因此,进行了一些挖掘,但问题似乎出在我正在iPhone 6上进行测试,该iPhone 不不支持UINotificationFeedbackGenerator
。我知道了,因为它们提供了触觉效果,并且没有抛出任何错误,这在世界上都是对的。
所以,这就是我要做的事情:
let modelName = UIDevice.modelName
if audioModels.contains(modelName) {
AudioServicesPlaySystemSound(1519)
} else {
UINotificationFeedbackGenerator().notificationOccurred(.success)
}
UIDevice.modelName
只是我在Internet(问题堆栈)上找到的获取设备名称的辅助函数。然后,我将该名称与我设置的audioModels
阵列进行比较,该阵列需要播放音频而不是使用NotificationFeedbackGenerator
的设备。不知道是否有更好的直观方法来检查每个设备的功能(请告诉我是否有),但这对我有用。
再次感谢您调查此问题。
答案 1 :(得分:1)
您不需要任何权限即可使用反馈生成器。使用麦克风时,它将不起作用。但是在其他情况下,一切都应该没问题。尝试在通知之前调用prepare()
方法。
let generator = UINotificationFeedbackGenerator()
generator.prepare()
generator.notificationOccurred(.success)