iOS Haptic Обратная связь не срабатывает - PullRequest
0 голосов
/ 21 сентября 2018

Я работаю с некоторыми UIGestures (в частности, принудительное касание).У меня все это работает, дополнительные обновления / анимации пользовательского интерфейса работают на принудительное касание.Тем не менее, я хотел бы добавить в тактильной обратной связи на жесткой прессе.К моему ужасу, этот фрагмент кода не работает.Функция вызывается, интерфейс обновляется, но нет тактильной обратной связи.Есть что-то, чего я здесь не хватает?Разрешения, возможности и т. Д .?

@objc func forceTouchHandler(_ sender: ForceTouchGestureRecognizer) {
    print("force touch")
    UINotificationFeedbackGenerator().notificationOccurred(.success)
    self.updateInterface()
}

Заранее благодарим за любые отзывы.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Итак, пришлось немного покопаться, но, похоже, проблема в том, что я тестировал на iPhone 6, который не поддерживает UINotificationFeedbackGenerator.Я подумал, потому что они обеспечивают тактильные прикосновения к нему, и не было никаких ошибок, все было правильно в мире.

Итак, вот что я закончил делать:

let modelName = UIDevice.modelName
if audioModels.contains(modelName) {
    AudioServicesPlaySystemSound(1519)
} else {
    UINotificationFeedbackGenerator().notificationOccurred(.success)
}

UIDevice.modelName - это просто вспомогательная функция, которую я нашел в Интернете (проб. Стек), которая получает имя устройства.Затем я сравниваю это имя с небольшим массивом, который я настроил - audioModels - устройств, которые должны воспроизводить звук вместо использования NotificationFeedbackGenerator.Не уверен, что есть лучший, более интуитивно понятный способ проверки работоспособности для каждого устройства (дайте мне знать, если есть), но это работает для меня.

Еще раз спасибо за рассмотрение вопроса.

0 голосов
/ 21 сентября 2018

Вам не нужно никакого разрешения на использование генератора обратной связи.Это не будет работать, когда вы используете микрофон.Но в других случаях все должно быть хорошо.Попробуйте вызвать prepare() метод до уведомления.

let generator = UINotificationFeedbackGenerator()
generator.prepare()
generator.notificationOccurred(.success)
...