Настройка
Мое приложение iOS связывается с устройством BLE. В качестве ответа на некоторые события в этом сообщении я хотел бы предоставить пользователю отзыв о c.
В попытке поддержать более старые телефоны, такие как iPhone 7, я решил использовать * 1007. *, в частности UIImpactFeedbackGenerator
для этой цели.
Теперь, когда я получаю указанные события через BLE, я вызываю feedbackGenerator.impactOccurred()
.
Поведение
Во время звонка никакой обратной связи не происходит c. Но система, тем не менее, запоминает эти вызовы на UIFeedbackGenerator
.
Потому что, когда пользователь взаимодействует с элементом UI впоследствии, все вызовы на feedbackGenerator.impactOccurred()
запускаются сразу, а обратная связь c предоставляется как ответ на это взаимодействие пользовательского интерфейса. Что весьма запутанно для пользователя, который не ожидал, что в этот момент получит обратную связь c. Кроме того, обратная связь hapti c может быть довольно интенсивной, если со временем накапливается достаточное количество вызовов.
Когда накапливается достаточное количество этих забытых вызовов hapticfeedback, система кажется перегруженной; следующие журналы генерируются в консоли пару десятков раз:
CAReportingClient.mm: 295: - [CAReportingClient init] _block_invoke: Не удалось связаться с вспомогательным приложением
Во всяком случае, это может быть ожидаемым поведением в соответствии с Apple Docs для UIFeedbackGenerator
:
Обратите внимание, что вызов этих методов не играет непосредственно хаптики. Вместо этого он информирует систему о событии. Затем система определяет, следует ли воспроизводить тактильные сигналы, на основе устройства, состояния приложения, оставшегося заряда батареи и других факторов.
Мой вопрос
Есть ли у вас опыт использования Core Bluetooth для изменения поведения CoreHaptics
или UIFeedbackGenerator
? Это моя отправная точка в отладке, потому что, когда я моделирую все части коммуникации локально, hapti c обратная связь работает просто отлично.
То, что я уже пробовал
- вызов
UIFeedbackGenerator
из основного / фонового потока - Использование
UINotificationFeedbackGenerator
вместо UIImpactFeedbackGenerator
- Вызов
prepare()
на UIFeedbackGenerator
заранее.