0

我有一個使用UICollectionView的快速應用程序。 UICollectionView中的每個單元都有一個顯示一些文本的視圖控制器。我添加了兩個按鈕來啓動並暫停AVSpeechSynthesizer閱讀文本。這兩個功能是: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 
} 

一個視圖起點和閱讀作品的停止,但如果我選擇另一個單元格的語音輸出停止在所有的工作,即使我重新選擇它之前就已經工作的細胞。只有重新啓動應用程序才能解決問題。

回答

1

我在玩AVSpeechSynthesizer API時遇到過這個問題。

當播放和暫停syntesizer,您使用的方法正確:

continueSpeaking()和pauseSpeaking(在:.word)

當你想之前的合成器說完駁回的ViewController ,請改用此方法:

synthesizer.stopSpeaking(at :.immediate)