Swift用于旁白识别的视图标签
Swift用于旁白识别的视图标签

Swift用于旁白识别的视图标签

本文将通过为视图添加标签,为iOS的旁白功能提供识别标签。

旁白开启功能

视图演示

struct ContentView: View {
    let pictures = [
        "apollo7",
        "apollo8",
        "apollo9",
        "apollo10",
    ]
    
    @State private var selectedPicture = Int.random(in: 0...3)
    
    var body: some View {
        Image(pictures[selectedPicture])
            .resizable()
            .scaledToFit()
            .onTapGesture {
                selectedPicture = Int.random(in: 0...3)
            }
    }
}

当开启“旁白”功能后,点击图片会阅读文件名称以及其他的英文,这会让使用人使用应用的过程中感觉困惑。

因此,在这里使用改进应用可访问性的修饰符.accessibilityLabel() 和 .accessibilityHint(),主要为屏幕阅读器(如 iOS 上的 VoiceOver)提供更清晰的信息,帮助用户理解界面元素的用途或内容。

accessibilityLabel()

功能

accessibilityLabel() 为视图设置一个简短的描述,用于告诉用户界面元素的主要用途或内容。

参数类型

接受一个 String 或 LocalizedStringKey 作为参数。

使用场景

适用于按钮、图像等控件,为其提供可被屏幕阅读器识别的描述。

Image(pictures[selectedPicture])
.accessibilityLabel("Delete") // 提供简短的替代文本,告诉用户此按钮用于删除

屏幕阅读器会朗读 “Delete”,而不是Image的默认描述。

accessibilityHint()

功能

accessibilityHint() 提供额外的、更加详细的上下文说明,告诉用户该控件的操作后会发生什么。它通常用于补充 accessibilityLabel() 的信息。

参数类型

接受一个 String 或 LocalizedStringKey 作为参数。

使用场景

适用于控件,提供更多操作后可能发生的行为或结果的说明。

Button(action: {
    print("Button tapped")
}) {
    Text("Submit")
}
.accessibilityLabel("Submit Form") // 提供简短描述
.accessibilityHint("Submits the form and sends your data") // 提供操作的后果或结果的详细说明

在此示例中,屏幕阅读器会朗读 “Submit Form”,然后是 “Submits the form and sends your data”。

两者配合使用的好处

1、提高可访问性

帮助用户明确控件的用途和操作结果,特别适合有视力障碍或依赖屏幕阅读器的用户。

2、增强用户体验

在语音提示中更直观地传达设计意图,减少歧义。

改进视图

在视图演示代码中,添加一个标签数组,用于图像的文字描述:

let labels = [
    "Tulips",
    "Frozen tree buds",
    "Sunflowers",
    "Fireworks",
]

使用accessibilityLabel可访问性标签,将图片索引绑定到标签上:

.accessibilityLabel(labels[selectedPicture])

修改后,重新点击图片,iOS系统就会读取正确的标签,而非图像的名称。

添加或删除特征的视图标签

给图像添加点击手势时:

Image(pictures[selectedPicture])
    .onTapGesture {
        selectedPicture = Int.random(in: 0...3)
}

图像实际上也是一个按钮,因此可以添加 accessibilityAddTraits来增添旁白的阅读细节:

.accessibilityAddTraits(.isButton)

旁白在阅读时,会阅读文字标签+Button+Img等旁白内容。

也可以删除图像特征:

.accessibilityRemoveTraits(.isImage)

以便让用户知道图像内容以及图像是一个按钮的信息。

如果只是使用按钮,而非带有点击手势的图像时,应该使用Button按钮:

Button {
    selectedPicture = Int.random(in: 0...3)
} label: {
    Image(pictures[selectedPicture])
        .resizable()
        .scaledToFit()
}
.accessibilityLabel(labels[selectedPicture])

这样就无需添加或删除特征。

accessibilityAddTraits()

功能

用于为视图添加一个或多个无障碍特性,这些特性会影响屏幕阅读器对该视图的描述或行为。

参数

接受一个或多个 AccessibilityTraits,可以是单个值或使用逗号分隔的组合。

常见特性

.button:使视图被识别为按钮。

.selected:表示视图当前处于选中状态。

.header:表明视图是一个章节或页面的标题。

.link:使视图被识别为超链接。

Button("Click Me") {
    print("Button tapped")
}
.accessibilityAddTraits(.isSelected) // 表示按钮处于选中状态

屏幕阅读器会朗读 “selected”,表明该按钮被选中。

accessibilityRemoveTraits()

功能

用于从视图中移除一个或多个默认的无障碍特性。如果视图自带某些行为,而这些行为在上下文中不适合,可以通过此修饰符将其移除。

参数

接受一个或多个 AccessibilityTraits。

Button("Tap Me") {
    print("Button tapped")
}
.accessibilityRemoveTraits(.isButton) // 使按钮不再被识别为按钮

屏幕阅读器将不再将该视图视为按钮,而是作为普通文本朗读。

AccessibilityTraits 的常见值

1).button:表示视图是一个按钮。

2).link:表示视图是一个超链接。

3).header:表示视图是一个标题,如页面或分区标题。

4).isSelected:表示视图处于选中状态。

5).isHidden:表示视图对屏幕阅读器是隐藏的。

6).playsSound:表示视图的交互会触发声音效果。

7).staticText:表示视图是静态文本(不可交互)。

8).updatesFrequently:表示视图的内容会频繁更新。

9).causesPageTurn:表示视图会触发页面翻转。

总结

accessibilityLabel() 是 “这是什么” 的简短说明。

accessibilityHint() 是 “使用它会发生什么” 的详细说明。

accessibilityAddTraits() 和 accessibilityRemoveTraits() 是增强视图无障碍功能的高级工具。

它们允许为屏幕阅读器用户定制视图的行为和语义,使应用更加易用和包容。

通过合理使用这些修饰符,可以确保界面元素在不同场景下都能清晰地传达其功能和状态。

个人心得

Apple的旁白功能帮助更多的人使用手机,让我想起学习HTML时,也有学习W3C的无障碍原则,为文本或内容提供可感知信息,帮助用户更好的阅读和理解内容。

在学习的过程中尝试闭上眼睛学习旁白,发现旁白的朗读有些吵闹,每一个语言都很生硬,但是又能把每个内容朗读出来,旁白会阅读标题的文字内容。

当关闭旁白后,再点击手机屏幕,就恢复了手机的原样。但失去旁白后,闭上眼睛就无法操作手机。旁白这一功能对于盲人来说确实是非常好的功能,让更多的人可以学习并应用手机。

如果在使用旁白的过程中感觉比较困难,可以语音唤起Siri进行关闭。

Apple后面在推出Apple intelligence时,或许可以让盲人或依赖屏幕阅读器的人群,在操作iOS系统上,得到更好的使用体验。

参考资料

Identifying views with useful labels:https://www.hackingwithswift.com/books/ios-swiftui/identifying-views-with-useful-labels

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注