Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как воспроизвести уведомление за кадром при потере сигнала (т. Е. При отсутствии взаимодействия с пользователем)?

Автор вопроса: ManelionОтветов: 3

Я создал простое приложение для потоковой передачи звука, которое выглядит так:

Когда я теряю соединение аудиопотока, мое приложение накладывает этот экран поверх пользовательского интерфейса:

Я хочу сделать приложение доступным для слепых или слабовидящих людей, поэтому я хочу, чтобы закадровый голос говорил "Сигнал потерян" и "Повторное подключение", когда сигнал теряется и появляется этот оверлейный экран. Все это происходит БЕЗ КАКИХ-ЛИБО ВЗАИМОДЕЙСТВИЙ ПОЛЬЗОВАТЕЛЯ (аналогично тому, что происходит, когда экран выходит из строя, и голосовой голос говорит: "Экран затемнен"). Было бы неплохо, если бы голосовой голос сказал: "Сигнал восстановлен" при повторном подключении тоже, но это не обязательно.

Чтобы сделать это еще более сложным, когда экран "сигнал потерян" открыт, пользователь не должен иметь возможность манипулировать какими-либо другими полями в основном пользовательском интерфейсе ниже.

Как мне этого добиться?

Заранее спасибо за вашу помощь!

iosswiftaccessibilityvoiceover

Ответы

Ответ 1 · рейтинг 2 · David Rönnqvist

Вы можете использовать UIAccessibilityPostNotification, чтобы сделать "объявление", которое заставит его прочитать его вслух (только когда включен VoiceOver):

UIAccessibilityPostNotification(
    UIAccessibilityAnnouncementNotification,
    "Signal Lost" as NSString
)

В документации для UIAccessibilityAnnouncementNotification объясняется аргумент NSString и когда его можно использовать. :

Это уведомление включает параметр, который представляет собой объект NSString, содержащий объявление. Вспомогательная технология выводит строку объявления, содержащуюся в параметре.

Используйте это уведомление, чтобы предоставить информацию о специальных возможностях о событиях, которые не обновляют пользовательский интерфейс приложения (UI) или обновляют пользовательский интерфейс только на короткое время.

Я бы порекомендовал использовать объявления экономно, но я бы сказал, что события, которые происходят без какого-либо взаимодействия с пользователем, часто - но не всегда - являются хорошим их использованием.

Ответ 2 · рейтинг 1 · Will Boland

Ну, вы можете создать mp3-запись голоса, а затем просто использовать AVAudio, чтобы воспроизвести ее, когда появится экран.

Ответ 3 · рейтинг 1 · BlackMirrorz

Если вы настроены на воспроизведение аудио, но у вас нет 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы