2015-10-05 117 views
5

现在,我的应用程序执行AVSpeechSynthesizer来读出每个屏幕的说明。应用程序还会考虑何时启用了Voiceover辅助功能。如何在配音演讲时将文本转换为语音,反之亦然?

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

目前的发展是在iOS 8上,使用Swift。

回答

4

OPTION 1

你可以听新元素时,通过观察UIAccessibilityElementFocusedNotification通知

[[NSNotificationCenter defaultCenter] addObserver:yourTTSManager 
             selector:@selector(interruptTTSFunction:) 
              name:UIAccessibilityElementFocusedNotification 
              object:nil]; 

,并在收到时打断您的自定义语音合成公告倾心为。

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

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

OPTION 2

您可以通过发布

UIAccessibilityPostNotification(UIAccessibilityPauseAssistiveTechnologyNotification, nil); 
您公布前

UIAccessibilityPostNotification(UIAccessibilityResumeAssistiveTechnologyNotification, nil); 

后,它是完整的告诉VoiceOver的暂停和重新启动。

优点:您的公告将被全部阅读。

缺点:当您暂停VoiceOver时,您可以控制用户的手。

RECOMENDATION

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

+0

嗨克里斯!感谢您的建议!但是,我似乎无法找到您正在使用的通知方法。唯一可用的是从[link](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAccessibilityFocus_Protocol/index.html#//apple_ref/occ/instm/NSObject/accessibilityElementDidLoseFocus)。我尝试覆盖'accessibilityElementDidLoseFocus()'和 'accessibilityElementDidBecomeFocused()'方法,但在导航到VoiceOver辅助功能模式中的下一个元素时似乎没有帮助。对此有何想法? –

+0

这不是一种方法。你必须注册才能收听通知。如果你不知道这些是什么,你应该阅读它们,因为这个问题的答案超出了这个问题的范围:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/通知/文章/ Registering.html – ChrisCM

+0

感谢您的澄清克里斯!由于我还不熟悉这一点,我只想澄清一下,'UIAccessibilityElementFocusedNotification'是否可用于iOS8?如果是的话,你是否介意分享如何去执行这个链接的链接? (: –

相关问题