根据swift中的AVSpeechUtterance更改滑块值

时间:2018-04-03 05:40:36

标签: ios swift avspeechsynthesizer

我正在使用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)
}

文本阅读器运行良好,但滑块值不会改变 任何人都可以建议我在文本阅读器上实现滑块的正确方法。

1 个答案:

答案 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