我正在使用AVSpeechUtterance
来阅读文本并尝试根据文本读取实现更改滑块。
我试过了: -
myUtterance = AVSpeechUtterance(string: idFileText)
myUtterance.rate = 0.3
synth.speak(myUtterance)
synth.continueSpeaking()
if let intValue = Int(idFileText) {
self.sliderValue.setValue(Float(intValue),
animated: true)
}
文本阅读器运行良好,但滑块值不会改变 任何人都可以建议我在文本阅读器上实现滑块的正确方法。
答案 0 :(得分:2)
使用AVSpeechSynthesizer
的委托speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
它提供了所说的当前字符范围
您可以使用它来确定滑块位置,因为您应该已经知道整个文本的长度。
一个基本的例子是:
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
willSpeakRangeOfSpeechString characterRange: NSRange,
utterance: AVSpeechUtterance) {
let progress = Float(characterRange.location + characterRange.length)
/ Float(utterance.speechString.count)
print(progress)
self.sliderValue.setValue(progress,
animated: true)
}
对于上述逻辑,请确保滑块对象的最小 - 最大范围为0-1 当然,你需要改进它以获得更顺畅的进展。
不要忘记:
synth.delegate = self