在iOS中控制无障碍语音朗读的数字

3

我正在尝试获取自定义 UIView 上的带有小数数字的 accessibilityValue,并将其读出为"二十点一",例如,在编辑Photos应用程序中的视频时,语音提示会读出视频修剪器上的持续时间和关键帧值。

默认设置将该值读为"二十点". 如果我使用accessibilitySpeechPunctuation键来设定accessibilityAttributedLabel,则它会作为"二十句号一"来读取。

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

除了手动构建要读取的数字字符串,还有谁知道如何让数字读出声称是"点"而不是"点"或"句号"吗?


在我看来,操作系统中没有任何可直接帮助您实现目标的内容。唯一的方法是在可访问性读出中将“.”替换为“point”。不过,在此之前,您需要检查语言设置,除非您的应用已国际化。 - XLE_22
这差不多是我预期的,我希望不必深入翻译和本地化“point”的兔子洞。如果真是这样,只为数字值提供更好的语音支持似乎有点奇怪。 ‍♂️ - Colin Humber
1
@XLE_22 我刚刚偶然发现,使用 ByteCountFormatter 生成的字符串会被读出为“二十点一兆字节”,例如。我正在尝试使用 NumberFormatter 进行调整,看看能否在那里实现相同的效果... - Colin Humber
1个回答

4

明白了!使用样式为.spellOutNumberFormatter格式化数字将生成一个完全拼写出来的字符串。虽然不适合用于标签文本,但正好适合无障碍标签。

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接