UI 更新期间 AVSpeechSynthesizer 卡顿

AVSpeechSynthesizer stutter during UI update

AVSpeechSynthesizer 正在说一个句子时,UI 正在发生变化(例如 ViewController 被推送,UIButton 的标题已更改,...),AVSpeechSynthesizer 是卡顿的。

我所有的 UI 更改都在 dispatch_async 块中。我必须这样做,否则 UI 无法正确更新。

dispatch_async(dispatch_get_main_queue(), ^{
   [self.aButton setTitle:@"title" forState:UIControlStateNormal];
});

我已经在主线程和后台线程上运行 speakUtterance试过了,但是没关系,一直卡顿。

如果在 speakUtterance 期间没有 UI 变化,则完全没有问题。

这是 AVSpeechSynthesizer 中的错误吗?我是否遗漏了有关线程的内容?

好的,我知道发生了什么事了。

调用AVSpeechSynthesizer的函数每次都执行这段代码:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
                                             withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionDuckOthers
                                                   error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];

事实证明这完全没有必要,并且会导致 AVSpeechSynthesizer.

出现打嗝和口吃

所以这毕竟与演讲期间做 UI 无关。