首页 文章

在VoiceOver停止说出文本后,使用AVSpeechSynthesizer宣布文本

提问于
浏览
1

我需要在执行某些操作时向我的应用程序的所有用户宣布一些文本 . 为此,我使用 AVSpeechSynthesizer . 这很有效,除非您使用VoiceOver执行操作 . 因为VoiceOver正在向用户宣布一些系统提供的信息,所以我的 AVSpeechUtterance 同时播放,因此声音重叠 . 我如何排队讲话,以便在VoiceOver完成讲话之前不播放?

2 回答

  • 2

    您可以通过观察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
        }
    }
    

    在处理您的应用程序之前,请记得删除观察!

    您可以使用的另一种方法(如果适用)是编辑用户正在使用的对象的 accessibilityLabelaccessibilityHint 属性 . 将这些属性设置为 @"" ,以便VoiceOver知道对该对象没有任何说法 .

    希望这可以帮助你,即使我的答案来得很晚:)

  • 1

    检查VoiceOver是否正在运行并使用您的消息发布 UIAccessibilityAnnouncementNotification 而不是使用 AVSpeechSynthesizer .

相关问题