【问题标题】:iOS Haptic Feedback not firingiOS 触觉反馈未触发
【发布时间】:2018-09-21 19:29:57
【问题描述】:

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

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

提前感谢您的任何反馈。

【问题讨论】:

  • 什么是ForceTouchGestureRecognizer,它是如何工作的?
  • ForceTouchGestureRecognizer 是一个自定义手势识别器,用于处理强制触摸手势。这一切都很好,而且开火很好。我正在进入这个函数处理程序,并且 self.updateInterface() 方法也被调用。唯一不起作用的是触觉响应。
  • 我确定它工作正常。但是因为你说在其他情况下一切正常,我想如何 ForceTouchGestureRecognizer 工作的一些细节,可能可以解释为什么系统会忽略你的反馈通知。

标签: ios swift haptic-feedback


【解决方案1】:

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

let generator = UINotificationFeedbackGenerator()
generator.prepare()
generator.notificationOccurred(.success)

【讨论】:

  • 感谢您就此事回复我。我复制并粘贴了您的代码,但仍然没有成功。
  • 我也遇到了同样的问题。我正在测试具有 Taptic Engine 的 6S,所以应该可以工作。
  • @YuryImashev 为什么在使用麦克风时不起作用?
【解决方案2】:

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

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

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

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

再次感谢您调查此问题。

【讨论】:

  • 对于能够运行 iOS13+ 的设备,导入 CoreHaptics。然后检查这个布尔值:CHHapticEngine.capabilitiesForHardware().supportsHaptics
【解决方案3】:

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

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

确保已开启。

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多