我有一个使用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)