5

我正在使用一些 UIGestures(特别是强制触摸)。我已经完成了所有这些工作,额外的 UI 更新/动画都在强制触摸下工作。但是,我想在硬按上添加触觉反馈。令我沮丧的是,这段代码不起作用。该函数被调用,界面更新,但没有触觉反馈。我在这里缺少什么吗?权限、能力等?

@objc func forceTouchHandler(_ sender: ForceTouchGestureRecognizer) {
    print("force touch")
    UINotificationFeedbackGenerator().notificationOccurred(.success)
    self.updateInterface()
}

提前感谢您的任何反馈。

4

3 回答 3

9

您不需要任何权限即可使用反馈生成器。当您使用麦克风时,它不起作用。但在其他情况下,一切都应该没问题。尝试prepare()在通知之前调用方法。

let generator = UINotificationFeedbackGenerator()
generator.prepare()
generator.notificationOccurred(.success)
于 2018-09-21T19:47:06.927 回答
3

因此,进行了一些挖掘,但似乎问题是我正在测试支持UINotificationFeedbackGenerator. 我想,因为他们提供了触觉触摸,并且没有抛出任何错误,这在世界上都是正确的。

所以,这就是我最终要做的事情:

let modelName = UIDevice.modelName
if audioModels.contains(modelName) {
    AudioServicesPlaySystemSound(1519)
} else {
    UINotificationFeedbackGenerator().notificationOccurred(.success)
}

UIDevice.modelName只是我在互联网上找到的获取设备名称的辅助函数(prob. Stack)。然后我将该名称与我设置的一个小数组进行比较audioModels- 需要播放音频而不是使用NotificationFeedbackGenerator. 不确定是否有更好更直观的方法来检查每个设备的功能(如果有,请告诉我),但这对我有用。

再次感谢您调查该问题。

于 2018-09-26T13:34:55.860 回答
0

对我来说,问题是触觉在系统级别被禁用。

设置 -> 声音和触觉 -> 系统触觉

确保打开。

于 2021-11-09T21:31:26.117 回答