iOS 应用如何实现无障碍用户体验

无障碍用户体验(Accessible User Experience,AUX)是指为身体有缺陷、认知能力受限或者年龄较大等群体而设计的应用程序接口,让他们能够方便地使用应用程序。在移动设备上,无障碍功能对于视障人士、听障人士以及其他一些使用上有困难的用户尤为重要。本文将介绍在 iOS 上如何实现无障碍用户体验。

VoiceOver

VoiceOver 是 iOS 中自带的无障碍功能,它可以为用户提供屏幕朗读和触摸控制等功能。VoiceOver 大量依赖于每个应用的页面和控件信息,因此开发者需要给每个元素分配可访问性标签和特殊属性。

可访问性标签

可访问性标签是 VoiceOver 用来标识应用程序页面和控件的名称。在默认情况下,VoiceOver 会使用元素的可读性文本。但是当产生二义性时(例如,有多个按钮文本相同),开发者应使用 accessibilityLabel 属性。

button.accessibilityLabel = "发送"

特殊属性

开发者可以使用以下几个属性来扩展组件的可访问性:

  • accessibilityHint:提供额外的语音提示信息;
  • accessibilityTraits:描绘元素角色和用途;
  • accessibilityValue:提供元素的值;
  • isAccessibilityElement:确定元素是否可以被 VoiceOver 封装。
button.accessibilityHint = "点击发送消息"
button.accessibilityTraits = .button
button.accessibilityValue = "Hello, world!"
button.isAccessibilityElement = true

嵌套元素

在许多情况下,开发者需要向某个更大的控件中添加子元素。对于这种情况,使用 accessibilityElements 属性包含相关的子元素。例如一个表格:

let table: UITableView = ...
let label: UILabel = ...

table.accessibilityElements = [label] + (0..<table.numberOfRowsInSection(0)).map {
   return table.cellForRow(at: IndexPath(row: $0, section: 0))
}

UIAccessibility

UIAccessibility 提供了一些常用 API,用于改进应用程序的可访问性。

UIAccessibilityPostNotification

UiAccessibilityPostNotification 可用于显示语音和震动提示信息。以下代码显示了如何在程序启动时短暂地震动一下:

UIAccessibility.post(notification: .announcement, argument: "程序已经启动")
UIAccessibility.post(notification: .announcement, argument: "程序已经启动", completionHandler: {
    // your completion handler code here
})

UIAccessibilityCustomRotor

UIAccessibilityCustomRotor 可以使 VoiceOver 用户更容易地找到某个特定类型的内容(例如标题)。如果您的应用程序包含许多这样的元素,则可能会很有用。以下是如何创建一个 rotor:

let customRotor = UIAccessibilityCustomRotor(name: "Section Titles",
                                             itemSearch: { predicate in
    return // your code to find section titles
})

UIAccessibilityElement

UIAccessibilityElement 可以用于创建更复杂的可访问组件,例如表示一个复杂视图的元素。

let view = MyCustomView()
let element = UIAccessibilityElement(accessibilityContainer: view)
element.accessibilityLabel = "Awesome view"
element.accessibilityTraits = .button
element.accessibilityValue = "\(view.value)"
view.accessibilityElements = [element]

AXEnhancements

AXEnhancements 是一个开源的库,它提供了许多界面元素和控件,以便改善应用程序的无障碍性。以下是 AXEnhancements 提供的一些例子:

AXSwitch

AXSwitch 是一个更多的自定义感觉的开关控件,它不使用 iOS 自带的 UISwitch。AXSwitch 接受以下选项:

let switch = AXSwitch(delegate: self,
                       onTintColor: UIColor.red,
                       offTintColor: UIColor.lightGray,
                       backgroundColor: UIColor.white,
                       thumbTintColor: UIColor.white,
                       cornerRadius: 16)

AXRatingView

AXRatingView 是一个显示评级的视图,它可以显示滑动或静态模式。AXRatingView 接受以下选项:

let ratingView = AXRatingView(delegate: self,
                               range: 1...5,
                               initialValue: 3,
                               size: CGSize(width: 30, height: 30),
                               space: 10,
                               emptyImage: UIImage(named: "emptyStar"),
                               fullImage: UIImage(named: "fullStar"))

总结

在本文中,我们已经介绍了如何在 iOS 应用程序中实现无障碍用户体验。您应该了解到 VoiceOver 和 UIAccessibility 以及 AXEnhancements 库。除了上述示例代码之外,还应该考虑对您的应用程序使用更具体的方法,以提高您的听障和视障用户的体验。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65acca69add4f0e0ff65d318