Изменение изображения с каждым предложенным словом в 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 это конец массива!

Другие вопросы по тегам