现在,我的应用程序实现了 AVSpeechSynthesizer 来读出每个屏幕的说明 . 该应用还会在启用Voiceover辅助功能时考虑 .
AVSpeechSynthesizer
我现在面临的问题是文本到语音功能与配音功能重叠 . 是否有解决方案来检测当用户导航到屏幕上的另一个元素时,TTS停止说话,或者当TTS说话时,画外音不会说话直到TTS结束(尽管前者是优选的) .
目前的开发是在iOS 8上,使用Swift .
选项1
您可以通过观察 UIAccessibilityElementFocusedNotification 通知来监听何时聚焦新元素
UIAccessibilityElementFocusedNotification
[[NSNotificationCenter defaultCenter] addObserver:yourTTSManager selector:@selector(interruptTTSFunction:) name:UIAccessibilityElementFocusedNotification object:nil];
并在收到自定义语音合成公告时中断它们 .
优点:为VoiceOver用户提供了很多控制权 .
缺点:您不知道VoiceOver何时读取新聚焦的控件,因此您无法使用它来中断和重新启动通知 .
方案2
您可以通过发布告诉VoiceOver暂停和重新启动
UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil);
在你宣布之前
UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil);
完成后 .
优点:您的公告将全部读完 .
缺点:当您暂停VoiceOver时,您可以从用户手中取出控制权 .
RECOMENDATION
如果您的公告很短,暂停和恢复AT并不是一个糟糕的解决方案 . 否则,我建议允许VoiceOver用户通过监听 UIAccessibilityElementFocusedNotification 事件来中断/取消您的通知,并在收到任何活动通知时取消它们 .
1 回答
选项1
您可以通过观察
UIAccessibilityElementFocusedNotification
通知来监听何时聚焦新元素并在收到自定义语音合成公告时中断它们 .
优点:为VoiceOver用户提供了很多控制权 .
缺点:您不知道VoiceOver何时读取新聚焦的控件,因此您无法使用它来中断和重新启动通知 .
方案2
您可以通过发布告诉VoiceOver暂停和重新启动
在你宣布之前
完成后 .
优点:您的公告将全部读完 .
缺点:当您暂停VoiceOver时,您可以从用户手中取出控制权 .
RECOMENDATION
如果您的公告很短,暂停和恢复AT并不是一个糟糕的解决方案 . 否则,我建议允许VoiceOver用户通过监听
UIAccessibilityElementFocusedNotification
事件来中断/取消您的通知,并在收到任何活动通知时取消它们 .