UIImpactFeedbackGenerator задерживается после вызова impactOccured
Я пытаюсь использовать UIImpactFeedbackGenerator в AVCaptureSession. у меня есть
AVAudioSession.sharedInstance().setAllowHapticsAndSystemSoundsDuringRecording(true)
чтобы разрешить тактильную обратную связь во время сеанса (только iOS 13).
Однако обратная связь всегда задерживается на полсекунды или около того.
Вот код, запускающий событие
@IBAction func doubleTapGesture(_ sender: UITapGestureRecognizer) {
if #available(iOS 13.0, *) {
DispatchQueue.main.async {
self.UIImpactHapticFeedback!.impactOccurred()
}
}
self.switchCamera
}
Я установил UIImpactHapticFeedback в моем viewDidLoad, который также подготавливает экземпляр.
Я считаю, что это связано с переключением камеры, потому что тактильная обратная связь не произойдет до тех пор, пока не будет выполнено переключение камеры.
Может ли кто-нибудь помочь мне добиться мгновенной тактильной обратной связи?
2 ответа
Итак, я только что узнал, как это исправить. Поскольку Apple отмечает в своих рекомендациях: «Обратите внимание, что вызов этих методов напрямую не влияет на тактильные ощущения. Вместо этого он информирует систему о событии», я предполагаю, что он ждет, пока не будет выполнено переключение камеры, чтобы вызвать тактильную обратную связь.
Чтобы исправить это, просто добавьте эту задержку, чтобы система вызывала это событие относительно немедленно.
@IBAction func doubleTapGesture(_ sender: UITapGestureRecognizer) {
if #available(iOS 13.0, *) {
self.UIImpactHapticFeedback!.impactOccurred()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1)
{
self.switchCamera()
}
}
}
Удалить
DispatchQueue.main.async
Вы уже находитесь в основной очереди, поэтому эта линия просто задерживает вас до завершения вызова switchCamera.