UIImpactFeedbackGenerator 在调用 impactOccured 后延迟

UIImpactFeedbackGenerator delayed after calling impactOccured

我正在尝试在 AVCaptureSession 中使用 UIImpactFeedbackGenerator。我有

AVAudioSession.sharedInstance().setAllowHapticsAndSystemSoundsDuringRecording(true)

在会话中允许触觉反馈(iOS 仅限 13)。

但是,反馈总是延迟半秒左右。

这里是触发事件的代码

@IBAction func doubleTapGesture(_ sender: UITapGestureRecognizer) {
    if #available(iOS 13.0, *) {
        DispatchQueue.main.async {
            self.UIImpactHapticFeedback!.impactOccurred()
        }
    }
    self.switchCamera
}

我在我的 viewDidLoad 中设置了 UIImpactHapticFeedback,它也准备了实例。

我认为这与切换相机动作有关,因为触觉反馈只有在切换相机动作完成后才会发生。

谁能帮我获得即时的触觉反馈?

删除

DispatchQueue.main.async

您已经在主队列中,因此这条线路只是在延迟您,直到调用 switchCamera 之后。

所以我刚刚找到了解决这个问题的方法。由于苹果在他们的指南中指出“请注意,调用这些方法不会直接播放触觉。相反,它会将事件通知系统。”,我猜它会等到相机切换完成才能触发触觉反馈。

解决此问题的方法是加入此延迟,以便系统相对立即调用此事件。

@IBAction func doubleTapGesture(_ sender: UITapGestureRecognizer) {
        if #available(iOS 13.0, *) {
                self.UIImpactHapticFeedback!.impactOccurred()
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.1)
                    {
                        self.switchCamera()
                    }
            }
    }