当语音合成器正在读取文本块时,我试图以5.0为增量推进确定的进度条。这是我的代码(不起作用):
if speechSynthesizer.speaking == false {
if let contents = textView.string where !contents.isEmpty {
speechSynthesizer.startSpeakingString(contents)
progressIndicator.hidden = false
while speechSynthesizer.speaking == true {
progressIndicator.incrementBy(5.0)
}
} else {
speechSynthesizer.startSpeakingString("The document is empty.")
}
}
}
进度条显示但不会增加。如果我采取"而..." out,只需使用语句" progressIndicator.incrementBy(5.0)"然后进度增加,但只增加一次。
有关如何解决这个问题的任何建议吗?
提前感谢大家!
-Syn -
答案 0 :(得分:1)
您可能需要将更新UI的代码移动到主运行循环,以便实际更新UI。所以将该行放在调度块中。
dispatch_async(dispatch_get_main_queue()) {
//insert UI code here
}
答案 1 :(得分:0)
我会使用NSSpeechSynthesizerDelegate协议 - 它能提供的最好的就是告诉你它要说的是哪个词。
optional func speechSynthesizer(_ sender: NSSpeechSynthesizer,
willSpeakWord characterRange: NSRange,
ofString string: String)
在说出每个单词时更新进度指示器
func speechSynthesizer(_ sender: NSSpeechSynthesizer,
willSpeakWord characterRange: NSRange,
ofString string: String) {
let pc = (characterRange.location + characterRange.length) / string.length
progressIndicator.doubleValue = (pc * 100)
}