我需要在执行某些操作时向我的应用程序的所有用户宣布一些文本 . 为此,我使用 AVSpeechSynthesizer . 这很有效,除非您使用VoiceOver执行操作 . 因为VoiceOver正在向用户宣布一些系统提供的信息,所以我的 AVSpeechUtterance 同时播放,因此声音重叠 . 我如何排队讲话,以便在VoiceOver完成讲话之前不播放?
AVSpeechSynthesizer
AVSpeechUtterance
您可以通过观察VoiceOver活动来实现此目的 . 首先添加画外音通知观察者:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(voiceOverDidStop:) name:UIAccessibilityAnnouncementDidFinishNotification object:nil];
然后,在指定的方法中:
-(void)voiceOverDidStop:(NSNotification*)n { NSString* msg; NSNumber* finished; msg = [[n userInfo] objectForKey:UIAccessibilityAnnouncementKeyStringValue]; finished = [[n userInfo] objectForKey:UIAccessibilityAnnouncementKeyWasSuccessful]; if(finished) { // send the AVSpeechSynthsizer message } }
在处理您的应用程序之前,请记得删除观察!
您可以使用的另一种方法(如果适用)是编辑用户正在使用的对象的 accessibilityLabel 和 accessibilityHint 属性 . 将这些属性设置为 @"" ,以便VoiceOver知道对该对象没有任何说法 .
accessibilityLabel
accessibilityHint
@""
希望这可以帮助你,即使我的答案来得很晚:)
检查VoiceOver是否正在运行并使用您的消息发布 UIAccessibilityAnnouncementNotification 而不是使用 AVSpeechSynthesizer .
UIAccessibilityAnnouncementNotification
2 回答
您可以通过观察VoiceOver活动来实现此目的 . 首先添加画外音通知观察者:
然后,在指定的方法中:
在处理您的应用程序之前,请记得删除观察!
您可以使用的另一种方法(如果适用)是编辑用户正在使用的对象的
accessibilityLabel
和accessibilityHint
属性 . 将这些属性设置为@""
,以便VoiceOver知道对该对象没有任何说法 .希望这可以帮助你,即使我的答案来得很晚:)
检查VoiceOver是否正在运行并使用您的消息发布
UIAccessibilityAnnouncementNotification
而不是使用AVSpeechSynthesizer
.