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.

Другие вопросы по тегам