Я создаю игру с изображением бинго. У меня есть просмотр коллекции с отображением девяти из двенадцати изображений. Я создал цикл for for, чтобы произнести девять высказываний, каждое высказывание, соответствующее одному изображению, отображаемому в представлении коллекции. Проблема в том, что все девять высказываний говорят один за другим без паузы. Высказывания «выплевываются» один за другим на консоли сразу после того, как я нажимаю кнопку воспроизведения в предыдущей раскадровке. Мне нужно одно высказывание, которое нужно произнести, и цикл для паузы, пока игрок не ударит соответствующее изображение. Затем мне нужно, чтобы цикл возобновился и произнес следующее высказывание, пока игрок не получит бинго. Выполнение didFinishSpeechUtterance не вызывается. Нет ничего в консоли при тестировании в симуляторе. Я упомянул «Как я могу сделать речь сразу для каждой итерации цикла while в Swift?» И «Проблема с AVSpeechSynthesizer, любые обходные пути?» Я также упомянул «метод делегирования AVSpeechSynthesizer didStartSpeechUtterance, который не называется», но я все еще тупик.AVSpeechSynthesizer didFinishSpeechUtterance не называется
class FarmViewController: UIViewController, UICollectionViewDataSource,
UICollectionViewDelegate, AVSpeechSynthesizerDelegate {
var arrayOfImages = ["pig", "horse", "dog", "cow", "duck", "cat", "sheep", "chicken", "rooster", "goat", "mouse", "donkey"]
var arrayOfSpeechUtterances = ["pig", "horse", "dog", "cow", "duck", "cat", "sheep", "chicken", "rooster", "goat", "mouse", "donkey"]
var arrayOfSU = [String]()
var speechSynthesizer = AVSpeechSynthesizer()
var images = ["pig", "horse", "dog", "cow", "duck", "cat", "sheep", "chicken", "rooster", "goat", "mouse", "donkey"]
var speechUtterances = [AVSpeechUtterance(string: "pig"), AVSpeechUtterance(string: "horse"), AVSpeechUtterance(string: "dog"), AVSpeechUtterance(string: "cow"), AVSpeechUtterance(string: "duck"), AVSpeechUtterance(string: "cat"), AVSpeechUtterance(string: "sheep"), AVSpeechUtterance(string: "chicken"), AVSpeechUtterance(string: "rooster"), AVSpeechUtterance(string: "goat"), AVSpeechUtterance(string: "mouse"), AVSpeechUtterance(string: "donkey")]
var dict = [AVSpeechUtterance(string: "pig"): "pig", AVSpeechUtterance(string: "horse"): "horse", AVSpeechUtterance (string: "dog"): "dog", AVSpeechUtterance(string: "cow"): "cow", AVSpeechUtterance(string: "duck"): "duck", AVSpeechUtterance(string: "cat"): "cat", AVSpeechUtterance(string: "sheep"): "sheep", AVSpeechUtterance(string: "chicken"): "chicken", AVSpeechUtterance(string: "rooster"): "rooster", AVSpeechUtterance(string: "goat"): "goat", AVSpeechUtterance(string: "mouse"): "mouse", AVSpeechUtterance(string: "donkey"): "donkey"]
var currentName = ""
var queue = dispatch_queue_create("com.speechUtterances.serialqueue", DISPATCH_QUEUE_SERIAL)
переопределение функ viewDidLoad() { super.viewDidLoad()
collectionView.delegate = self
collectionView.dataSource = self
speechSynthesizer.delegate = self
self.speechSynthesizer.delegate = self
arrayOfImages.shuffle()
for image in arrayOfImages [0...8] {
arrayOfSU.append(image)
}
arrayOfSU.shuffle()
**dispatch_sync(queue) {() -> Void in
for name in self.arrayOfSU {
let speechUtterances = AVSpeechUtterance (string: name)
var beforeSpeechString = ""
var beforeSpeech = AVSpeechUtterance (string: beforeSpeechString)
self.speechSynthesizer.speakUtterance(beforeSpeech)
print("before speech")**
var currentName = AVSpeechUtterance (string: name)
**print("current name")
speechUtterance.rate = 0.50
speechUtterance.pitchMultiplier = 2.0
speechUtterance.volume = 1.0**
**self.speechSynthesizer.speakUtterance(currentName)
}
func speechSynthesizer(synthesizer: AVSpeechSynthesizer!, didFinishSpeechUtterance utterance: AVSpeechUtterance!){
print("finish")
}**
}
}
Это работало Midhun MP! Тем не менее, высказывания все еще говорят без паузы в цикле, и метод didFinishSpeechUtterance вызывается после того, как все девять высказываний были произнесены вместо паузы после каждого отдельного высказывания. – Alicia