在实际 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)
}
}
我很确定我的 hapticsEngine
和 hapticPattern
是有效的并且没有错误,因为如果我在第 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).
我遵循了 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)
}
}
我很确定我的 hapticsEngine
和 hapticPattern
是有效的并且没有错误,因为如果我在第 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).