Управление доступностью голосового считывания номеров в iOS

Я пытаюсь получить accessibilityValue с десятичным числом в пользовательском UIView для считывания как «двадцать один», например, аналогично тому, как голос за кадром считывает продолжительность и значения ключевых кадров в триммере видео при редактировании видео в Приложение для фотографий.

Настройка по умолчанию считывает значение как «двадцать точек один». Если вместо этого установить accessibilityAttributedLabel с помощью клавиши accessibilitySpeechPunctuation, это будет читаться как «двадцать период один».

view.accessibilityAttributedLabel = NSAttributedString(string: "20.1", attributes: [.accessibilitySpeechPunctuation: true])

Не прибегая к ручному построению числовой строки для считывания, кто-нибудь знает, как заставить число читать «точку» вместо «точка» или «точка»?


person Colin Humber    schedule 02.05.2020    source источник
comment
На мой взгляд, в самой ОС нет ничего, что могло бы вам помочь. ???? Единственный способ достичь своей цели — заменить '.' по слову «точка» в вашей доступности зачитано. ???? Однако перед этим вам нужно будет проверить язык, если только вы не интернационализируете свое приложение.   -  person XLE_22    schedule 02.05.2020
comment
Примерно этого я и ожидал ???? Я надеялся, что мне не придется копаться в кроличьей норе переводов и локализаций. Просто кажется странным, что нет лучшей голосовой поддержки для числовых значений, если это так ????????‍♂️   -  person Colin Humber    schedule 02.05.2020
comment
@ XLE_22 XLE_22 Я только что случайно обнаружил, что строка, сгенерированная из ByteCountFormatter, читается, например, как двадцать целых один мегабайт. Играюсь с NumberFormatter, чтобы посмотреть, смогу ли я заставить его работать...   -  person Colin Humber    schedule 03.05.2020


Ответы (1)


Понятно! Форматирование числа с использованием NumberFormatter со стилем .spellOut создаст строку с полностью прописанным значением. Не то, что мы хотим для текста метки, а именно то, что мы хотим для метки доступности.

let formatter = NumberFormatter()
formatter.numberStyle = .spellOut

let label = UILabel()
label.text = formatter.string(from: 20.1)
label.accessibilityLabel = formatter.string(from: 20.1)

// prints out "twenty point one"
print(label.accessibilityLabel)
person Colin Humber    schedule 02.05.2020