如何在画外音讲话时停止文本到语音,或者在Swift中反之亦然?

Che*_*CH. 5 accessibility text-to-speech voiceover ios8

现在,我的应用程序实现AVSpeechSynthesizer了读取每个屏幕的说明.该应用还会在启用Voiceover辅助功能时考虑.

我现在面临的问题是文本到语音功能与配音功能重叠.是否有解决方案来检测当用户导航到屏幕上的另一个元素时,TTS停止说话,或者当TTS说话时,画外音不会说话直到TTS结束(尽管前者是优选的).

目前的开发是在iOS 8上,使用Swift.

Chr*_*sCM 5

选项1

您可以通过观察UIAccessibilityElementFocusedNotification通知来监听新元素何时被聚焦

[[NSNotificationCenter defaultCenter] addObserver:yourTTSManager
                                         selector:@selector(interruptTTSFunction:)
                                             name:UIAccessibilityElementFocusedNotification 
                                           object:nil];
Run Code Online (Sandbox Code Playgroud)

并在收到自定义语音合成通知时打断它们。

优点:为 VoiceOver 用户提供了很多控制权。

缺点:您不知道 VoiceOver 何时完成读取新聚焦的控件,因此您不能使用它来中断和重新启动公告。

选项 2

您可以通过发布来告诉 VoiceOver 暂停和重新启动

UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil); 
Run Code Online (Sandbox Code Playgroud)

在您宣布之前和

UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil); 
Run Code Online (Sandbox Code Playgroud)

完成后。

优点:您的公告将被完整阅读。

缺点:当您暂停 VoiceOver 时,您的控制权会从用户手中夺走。

推荐

如果您的公告很短,暂停和恢复 AT 并不是一个糟糕的解决方案。否则,我建议允许 VoiceOver 用户通过监听UIAccessibilityElementFocusedNotification事件来中断/取消您的通知,并在收到它们时取消任何活动通知。

  • 根据`UIAccessibilityConstants.h`:`目前,这些通知仅适用于切换控制。`所以你可以暂停VoiceOver,我的测试证实了这一点:( (3认同)