菜鸟教程小白 发表于 2022-12-13 10:27:12

ios - 在 VoiceOver 停止朗读文本后使用 AVSpeechSynthesizer 播报文本


                                            <p><p>我需要在我的应用程序的所有用户执行某些操作时向他们通告一些文本。为此,我使用了 <code>AVSpeechSynthesizer</code>。这很有效,除非您使用 VoiceOver 来执行操作。因为 VoiceOver 正在向用户宣布一些系统提供的信息,然后同时播放我的 <code>AVSpeechUtterance</code>,所以声音重叠。如何将我的语音排入队列,以便在 VoiceOver 结束说话后才播放?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以通过观察 VoiceOver 事件来实现这一点。先添加一个Voiceover通知观察者:</p>

<pre><code>[ addObserver:self selector:@selector(voiceOverDidStop:) name:UIAccessibilityAnnouncementDidFinishNotification object:nil];
</code></pre>

<p>然后,在指定的方法中:</p>

<pre><code>-(void)voiceOverDidStop:(NSNotification*)n {
    NSString* msg;
    NSNumber* finished;

    msg = [ objectForKey:UIAccessibilityAnnouncementKeyStringValue];
    finished = [ objectForKey:UIAccessibilityAnnouncementKeyWasSuccessful];

    if(finished) {
      // send the AVSpeechSynthsizer message
    }
}
</code></pre>

<p>请记住在处理您的应用程序之前删除观察!</p>

<p>您可以使用的另一种方法(如果适用)是编辑用户正在操作的对象的 <code>accessibilityLabel</code> 和 <code>accessibilityHint</code> 属性。将这些属性设置为 <code>@""</code>,这样 VoiceOver 就知道该对象没有什么可说的了。 </p>

<p>希望这对您有所帮助,即使我的回答来得太晚了:
)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 VoiceOver 停止朗读文本后使用 AVSpeechSynthesizer 播报文本,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29312071/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29312071/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 VoiceOver 停止朗读文本后使用 AVSpeechSynthesizer 播报文本