现在,我的应用程序执行AVSpeechSynthesizer
来读出每个屏幕的说明。应用程序还会考虑何时启用了Voiceover辅助功能。如何在配音演讲时将文本转换为语音,反之亦然?
我现在面临的问题是文本到语音功能与配音功能重叠。是否有解决方案来检测当用户导航到屏幕上的另一个元素时,TTS停止说话,或者当TTS在说话时,在TTS结束之前配音不会说话(前者虽然是首选)。
目前的发展是在iOS 8上,使用Swift。
现在,我的应用程序执行AVSpeechSynthesizer
来读出每个屏幕的说明。应用程序还会考虑何时启用了Voiceover辅助功能。如何在配音演讲时将文本转换为语音,反之亦然?
我现在面临的问题是文本到语音功能与配音功能重叠。是否有解决方案来检测当用户导航到屏幕上的另一个元素时,TTS停止说话,或者当TTS在说话时,在TTS结束之前配音不会说话(前者虽然是首选)。
目前的发展是在iOS 8上,使用Swift。
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
事件来中断/取消您的通知,并在收到任何活动通知时取消它们。
嗨克里斯!感谢您的建议!但是,我似乎无法找到您正在使用的通知方法。唯一可用的是从[link](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIAccessibilityFocus_Protocol/index.html#//apple_ref/occ/instm/NSObject/accessibilityElementDidLoseFocus)。我尝试覆盖'accessibilityElementDidLoseFocus()'和 'accessibilityElementDidBecomeFocused()'方法,但在导航到VoiceOver辅助功能模式中的下一个元素时似乎没有帮助。对此有何想法? –
这不是一种方法。你必须注册才能收听通知。如果你不知道这些是什么,你应该阅读它们,因为这个问题的答案超出了这个问题的范围:https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/通知/文章/ Registering.html – ChrisCM
感谢您的澄清克里斯!由于我还不熟悉这一点,我只想澄清一下,'UIAccessibilityElementFocusedNotification'是否可用于iOS8?如果是的话,你是否介意分享如何去执行这个链接的链接? (: –