我有一个使用UICollectionView的快捷应用程序。 UICollectionView中的每个单元格都有一个显示某些文本的视图控制器。我添加了两个按钮来启动和暂停AVSpeechSynthesizer阅读文本。这两个功能是:

    func playclicked(){
    if isInitial {
        let textString = (postTitle.text ?? "") + ".\n\n" + postContentWeb.stringByEvaluatingJavaScript(from: "document.body.textContent")!
        synth = AVSpeechSynthesizer()
        myVoice = AVSpeechSynthesisVoice(language: "de-DE")
        myUtterance = AVSpeechUtterance(string: textString)
        myUtterance.voice = myVoice
        synth.speak(myUtterance)
        synth.delegate = self
        navigationItem.rightBarButtonItems = isPlayingButtons
        isInitial = false
    } else {
        synth.continueSpeaking()
        navigationItem.rightBarButtonItems = isPlayingButtons
    }
}

func pauseclicked(){
    synth.pauseSpeaking(at: .word)
    navigationItem.rightBarButtonItems = isStoppedButtons
}


对于一个视图,读取的开始和停止有效,但是,如果我选择另一个单元,则语音输出将完全停止工作,即使我重新选择了以前工作的单元也是如此。仅重新启动应用程序即可解决问题。

最佳答案

在使用AVSpeechSynthesizer API之前,我已经遇到了这个问题。

播放和暂停合成器时,您正确使用了以下方法:

ContinueSpeaking()和pauseSpeaking(at.word)

当您想在合成器结束讲话之前关闭ViewController时,请改用以下方法:

synthesizer.stopSpeaking(at.immediate)

09-26 07:10