Изменение изображения с каждым предложенным словом в iOS?
Я хочу, чтобы мое изображение менялось с каждым предложением в str, но оно не меняется
let elements = ["1","2","3"]
var cx = 0
for str in components{
OutImage.image = UIImage(named: elements1[cx+1])
myUtterance = AVSpeechUtterance(string: str)
myUtterance.rate = 0.4
myUtterance.pitchMultiplier = 1.3
myUtterance.voice = AVSpeechSynthesisVoice(language: "en-GB")
myUtterance.voice = voiceToUse
synth.speak(myUtterance)
}
1 ответ
Вы не можете сделать это в цикле, потому что speak
является асинхронным, это означает, что он будет выполняться "параллельно" с остальной частью вашего кода. К тому времени, как закончится ваш цикл for, синтезатор речи, вероятно, даже не начал синтезировать ваше первое предложение!
Решение состоит в том, чтобы использовать AVSpeechSynthesizerDelegate
, В частности, вам необходимо реализовать этот метод:
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer,
didFinish utterance: AVSpeechUtterance)
Этот метод делегата вызывается, когда синтезатор заканчивает высказывание.
В методе вы можете выяснить, какое изображение следует показать, посмотрев на cx
переменная. Тогда вы должны увеличить cx
, После этого, используя cx
получите следующее высказывание и позвоните speak
, Вы также должны помнить, чтобы проверить, cx
это конец массива!