如何在信号丢失时播放画外音通知(即没有用户交互)?

时间:2018-02-26 22:44:19

标签: ios swift accessibility voiceover

我已经构建了一个简单的音频流应用程序,如下所示:

enter image description here

当我丢失音频流连接时,我的应用将此屏幕叠加在用户界面上:

enter image description here

我想让盲人或低视力的人可以使用该应用程序,因此我希望Voiceover在信号丢失并显示覆盖屏幕时说“信号丢失”和“重新连接”。这一切都发生在没有任何用户交互的情况下(类似于屏幕超时时发生的情况,而VO说,'屏幕变暗')。对于VO来说,重新连接时“信号恢复”也很好,但并非绝对必要。

为了使它变得更加棘手,当“信号丢失”屏幕启动时,用户不应该操纵下面主UI中的任何其他字段。

我如何做到这一点?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

您可以使用UIAccessibilityPostNotification制作"声明",这将使其大​​声读取(仅当VoiceOver启用时):

UIAccessibilityPostNotification(
    UIAccessibilityAnnouncementNotification, 
    "Signal Lost" as NSString
)

documentation for UIAccessibilityAnnouncementNotification解释NSString论证以及何时适合使用:

  

此通知包含一个参数,该参数是包含公告的NSString对象。辅助技术输出参数中包含的公告字符串。

     

使用此通知提供有关未更新应用程序用户界面(UI)或仅短暂更新UI的事件的辅助功能信息。

我的建议是谨慎使用公告,但我要说的是,在没有任何用户互动的情况下发生的事件通常 - 但并非总是 - 很好地利用它们。

答案 1 :(得分:1)

如果您开始播放音频但没有MP3,则可以使用AVFoundation:

import AVFoundation

创建一个合成警告等功能,例如

/// Reads A Word Using Speech Syntheseis
///
/// - Parameters:
///   - word: String
func readWordAloud(_ word: String){

    //1. Create The Word To Be Read Aloud
    let wordReader = AVSpeechUtterance(string: word)
    wordReader.volume = 1

    //2. Pass It To The Speech Synthesizer
    let speechSynthesizer = AVSpeechSynthesizer()
    speechSynthesizer.speak(wordReader)

}

像这样调用方法:

readWordAloud("No Audio Available")

要禁用与UIView的互动,请使用:

self.view.isUserInteractionEnabled = false