设置
我的 iOS 应用程序正在与 BLE 设备通信。作为对此通信中某些事件的响应,我想向用户提供触觉反馈。
为了支持像 iPhone 7 这样的旧手机,我决定使用UIFeedbackGenerator
,专门UIImpactFeedbackGenerator
用于此目的。
现在,当通过 BLE 接收所述事件时,我调用feedbackGenerator.impactOccurred()
.
行为
在通话时,不会发生触觉反馈。但是系统仍然会记住这些调用UIFeedbackGenerator
。
因为,当用户随后与 UI 元素交互时,所有调用都会立即feedbackGenerator.impactOccurred()
触发,并且提供触觉反馈作为对该 UI 交互的响应。这让用户感到非常困惑,他们当时并没有预料到触觉反馈。此外,如果随着时间的推移积累了足够多的呼叫,触觉反馈可能会非常强烈。
当这些被遗忘的触觉反馈调用累积到足够多时,系统似乎就超载了。以下日志在控制台中生成了几十次:
CAReportingClient.mm:295:-[CAReportingClient init]_block_invoke:无法与帮助应用程序通信
无论如何,根据苹果文档,这可能是预期的行为UIFeedbackGenerator
:
请注意,调用这些方法不会直接播放触觉。相反,它会将事件通知系统。然后系统根据设备、应用程序的状态、剩余电池电量和其他因素确定是否播放触觉。
我的问题
您是否有使用 Core Bluetooth 改变CoreHaptics
or行为的经验UIFeedbackGenerator
?这是我调试的起点,因为当我在本地模拟通信的所有部分时,触觉反馈工作得很好。
我已经尝试过的
UIFeedbackGenerator
从主/后台线程调用- 使用
UINotificationFeedbackGenerator
代替UIImpactFeedbackGenerator
- 提前打电话
prepare()
。UIFeedbackGenerator