Тактильная обратная связь не работает с AVFoundation? (UIimpactFeedbackGenerator и т. д.)

Я пытаюсь получить вид видео/камеры в фоновом режиме, в то же время я также разрешаю тактильную обратную связь в своем приложении для различных действий, но кажется, что AVFoundation плохо работает ни с одним из вызовов, которые я делаю, которые включают тактильные вызовы :

if #available(iOS 10.0, *) {
    let generator = UIImpactFeedbackGenerator(style: .light)
    generator.prepare()
    generator.impactOccurred()
    
    // More:

    let feedbackGenerator  = UISelectionFeedbackGenerator()
    feedbackGenerator.selectionChanged()
}

Тактильная обратная связь работает отлично и, как и ожидалось, пока материал AVFoundation закомментирован. Любые идеи?

С использованием:

captureSession = AVCaptureSession()

А ТАКЖЕ:

previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)

person JasonAddFour    schedule 27.05.2017    source источник
comment
у меня такая же проблема   -  person ullstrm    schedule 28.09.2017
comment
Похоже, это вызывает помехи аудиовхода (микрофона) для UIImpactFeedbackGenerator. Я пытаюсь найти способ обойти себя...   -  person Gizmodo    schedule 15.10.2017
comment
Есть новости по этому поводу?   -  person gbhall    schedule 14.11.2017


Ответы (2)


Я предполагаю, что если вы используете AVCaptureSession, то у вас, вероятно, есть такой код:

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)")
}

Таким образом, аудиовход плохо работает с тактильным движком. Вы должны удалить аудиовход из сеанса захвата, прежде чем играть тактильно, а затем добавить его обратно.

person Max Sokolov    schedule 24.04.2018

Начиная с iOS 13 вы можете установить setAllowHapticsAndSystemSoundsDuringRecording(_:) для AVAudioSession:

do {
    try AVAudioSession.sharedInstance().setAllowHapticsAndSystemSoundsDuringRecording(true)
} catch {
    print(error)
}

и тогда вы можете использовать:

let generator = UIImpactFeedbackGenerator(style: .light)
generator.prepare()
generator.impactOccurred()
person Vukašin Manojlović    schedule 21.01.2021