0

我遵循了Apple关于在我的应用程序中实现触觉功能的指南。我在我的 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)
            }
}

我很确定我的hapticsEngineandhapticPattern是有效的并且没有错误,因为如果我在第 95 行设置中断并逐行遍历do块,我的手机会在第99行之后振动。只是在我删除断点并运行之后该应用程序,我的 iPhone 不发送任何触觉反馈。

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

4

2 回答 2

1

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

调用触觉引擎的 start(completionHandler:) 进行异步启动,或调用 start() 同步(立即)启动引擎。

于 2021-11-04T09:05:59.983 回答
0

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

let feedbackGenerator = UIImpactFeedbackGenerator(style: .medium)
feedbackGenerator.impactOccurred()
于 2021-11-04T07:43:07.500 回答