Всякий раз, когда я перехожу к этому контроллеру представления, функция speakText()
в viewDidLoad
по какой-то причине не работает, и загрузка контроллера представления занимает много времени (это не тот случай, когда я удаляю эту строку). Над этой строкой текст текстовой метки устанавливается на строку, которая должна произноситься, и работает нормально. Каждый раз, когда вызывается recordTapped
, синтез речи работает отлично. Тем не менее, он просто не работает в viewDidLoad
.
ОБНОВЛЕНИЕ Я провел еще несколько тестов после назначения делегата контроллера представления синтезатора речи и асинхронного запуска функции. Тем не менее, это не работает. Я установил контроллер вида в исходный контроллер вида, и он все еще не работает, так что это не проблема в навигации, а время загрузки все еще очень велико.
import UIKit
import AVFoundation
class StartViewController: UIViewController, AVAudioRecorderDelegate {
@IBOutlet weak var questionLabel: UILabel!
@IBOutlet weak var recordButton: UIButton!
let synth = AVSpeechSynthesizer()
var myUtterance = AVSpeechUtterance(string: "")
var number = 0
override func viewDidLoad() {
super.viewDidLoad()
synth.delegate? = self as! AVSpeechSynthesizerDelegate
number = 0
DispatchQueue.global(qos: .userInitiated).async {self.speakText(int: number)}
self.number = self.number + 1
}
@IBAction func recordTapped(_ sender: UIButton) {
speakText(int: number)
number = number + 1
}
func speakText(int: Int) {
myUtterance = AVSpeechUtterance(string: "the number is \(int)")
myUtterance.voice = AVSpeechSynthesisVoice(language: "en-AU")
synth.speak(myUtterance)
}
}