2017-12-12 6 views
1

나는 나의 이미지보기 STR의 모든 문장 변경하고자하지만, 그것은에서 실행하는 것을 의미, speak 비동기이기 때문에모든 문장의 이미지가 iOS에서 변경 되었습니까?

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) 
} 

답변

0

당신은, for 루프에서 할 수 없어 변경되지 않습니다 나머지 코드와 "평행"합니다. for 루프가 끝날 때까지, 음성 신시사이저는 아마도 첫 번째 문장을 합성하지 않았을 것입니다!

해결책은 AVSpeechSynthesizerDelegate을 사용하는 것입니다. 특히 다음과 같은 방법을 구현해야합니다.

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, 
        didFinish utterance: AVSpeechUtterance) 

신디사이저가 발언을 끝내면이 위임 메서드가 호출됩니다.

이 방법을 사용하면 cx 변수를보고 표시 할 이미지를 파악할 수 있습니다. 그런 다음 cx을 증가시켜야합니다. 그 후에 cx을 사용하여 다음 발언을 듣고 speak으로 전화하십시오. cx이 배열의 끝인지 여부를 기억해야합니다.

+0

감사합니다. 시험해 보겠습니다. –