I'm trying to have a video/camera view in the background while I also allow for haptic feedback in my app for various actions, but it seems that AVFoundation is not playing nice with any of the calls I am making that involve the haptic calls:
if #available(iOS 10.0, *) {
let generator = UIImpactFeedbackGenerator(style: .light)
generator.prepare()
generator.impactOccurred()
// More:
let feedbackGenerator = UISelectionFeedbackGenerator()
feedbackGenerator.selectionChanged()
}
Haptic feedback works great and as expected as long as the AVFoundation stuff is commented out. Any ideas?
Using:
captureSession = AVCaptureSession()
AND:
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
Since iOS 13, you can set setAllowHapticsAndSystemSoundsDuringRecording(_:)
for AVAudioSession
:
do {
try AVAudioSession.sharedInstance().setAllowHapticsAndSystemSoundsDuringRecording(true)
} catch {
print(error)
}
and then you can use:
let generator = UIImpactFeedbackGenerator(style: .light)
generator.prepare()
generator.impactOccurred()
I assume that if you are using AVCaptureSession then you probably have code like this:
do {
let audioDevice = AVCaptureDevice.default(for: .audio)
let audioDeviceInput = try AVCaptureDeviceInput(device: audioDevice!)
if captureSession.canAddInput(audioDeviceInput) {
captureSession.addInput(audioDeviceInput)
} else {
print("Could not add audio device input to the session")
}
} catch {
print("Could not create audio device input: \(error)")
}
So audio input is not playing well with haptic engine. You have to remove audio input from capture session before you are playing haptic and then add it back.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With