在实际 iPhone 上测试时没有触觉反馈

No haptic feedback when testing on a actual iPhone

我遵循了 Apple's guide 关于为我的应用程序实现触觉功能的信息。我在 iPhone 上进行了测试,但是当我触发触觉动作(点击 tableView 控制器上的按钮)时,没有任何反应。 这是我的实现:

if supportHaptics {//line 95
            do {
                let player = try hapticsEngine.makePlayer(with: hapticPattern)
                hapticsEngine.start(completionHandler:nil)
                try player.start(atTime: 0)//line 99
                hapticsEngine.stop(completionHandler: nil)
            } catch {
                print(error)
            }
}

我很确定我的 hapticsEnginehapticPattern 是有效的并且没有错误,因为如果我在第 95 行设置一个中断并通过 do 块行行,我的phone确实在第99行之后振动。只是在我删除断点和运行应用程序后,我的iPhone没有发送任何触觉反馈。

我错过了什么?任何事情都会有所帮助。

好的,我整理好了。不要使用 CHHapticsEngine 来完成点击反馈。相反,使用下面的两行可以轻松触发点击(来自 UIKit)。

let feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)
feedbackGenerator.impactOccurred()

您使用带有完成处理程序参数的启动,这意味着触觉引擎将异步工作,即在将来的某个时间工作,然后停止它。在逐步调试中,它起作用了,因为触觉引擎有足够的时间来执行。如果您想要同步(即立即启动),则必须调用 start() (= 无参数,与参数 = nil 不同) 来自 Apple 文档:

Call the haptic engine’s start(completionHandler:) for an asynchronous start, or start() to start the engine synchronously (immediately).