0

我正在尝试在 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,它也准备了实例。

我相信这与切换相机动作有关,因为在切换相机动作完成之前,触觉反馈不会发生。

有人可以帮我获得即时的触觉反馈吗?

4

2 回答 2

1

删除

DispatchQueue.main.async

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

于 2021-07-20T21:27:57.027 回答
0

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

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

@IBAction func doubleTapGesture(_ sender: UITapGestureRecognizer) {
        if #available(iOS 13.0, *) {
                self.UIImpactHapticFeedback!.impactOccurred()
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.1)
                    {
                        self.switchCamera()
                    }
            }
    }
于 2021-07-20T21:38:29.993 回答