iOS 盲人模式开发

335 阅读4分钟

VoiceOver 的使用

  1. 如何打开 VoiceOver iPhone 设备:通过 设置 - 通用 - 辅助功能 - VoiceOver 打开。

  2. 如何关闭 VoiceOver iPhone 设备:三指同时触摸屏幕,连续点击屏幕三下。如果无效可以尝试连续按三下 Home 键。或者通过打开的流程来关闭。

  3. VoiceOver 模式下,如何操作?

  • 轻点一次来选择项目,比如我们选择一个 App;
  • 轻点两次来激活所选项目,比如我们通过该操作打开一个 App;
  • 三指轻扫来滚动,如果我们通过该操作滑动屏幕。

iOS 盲人模式开发

UIAccessibility 非正式协议提供了关于 App 用户界面元素的无障碍信息。辅助应用,例如 VoiceOver,将此消息传递给残障用户,帮助他们使用 App。Apple 为我们提供了相应的 APIs。

标准的 UIKit 控件和视图默认实现了 UIAccessibility 方法,因此默认对辅助应用是可访问的。

UIAccessibility 非正式协议可可以通过 UIAccessibilityElement 类来实现,该类呈现自定义用户界面对象。如果我们自定义了一个 UIView 的子类,开发者需要创建一个 UIAccessibilityElement 实例来呈现它。在这种情况下,开发者要保证正确所有的 UIAccessibility 属性并返回无障碍元素的属性。

  • accessibilityLabel 属性 该属性是用来描述控件内容是什么,UIButtonUILabel 默认是从 titletext 中获取,UITextField 从输入框的内容获取。如果控件没有提供一个可用于描述的标签,那么我们就需要通过该属性来提供了一个简洁的描述。比如,有一个播放音乐的按钮,APP提供的可能是一个▶️ 的图片告知用户它的作用。为了可无障碍访问,我们可以将该属性设置成“播放音乐”,这样辅助应用就可以将该消息提供给残障用户。需要注意的是,该属性不要包含控件类型的信息(比如设置成“播放音乐按钮”),关于这个关联信息会通过 accessibilityTraits 属性来说明。

  • accessibilityTraits 属性 该属性用于描述控件的类型,如它是一个按钮,或者它是一个链接。它结合 accessibilityLabel 属性可准确的描述无障碍元素的特征。元素获取焦点后会在第二个播放。比如 accessibilityLabel 设置为“登录”,而该属性accessibilityTraits 设置为 UIAccessibilityTraitButton,那么系统就会在无障碍模式下播放“登录按钮”。

  • accessibilityHint 属性 用来描述一个动作。如“播放歌曲”,“购买商品”等。当 accessibilityLabel 不能很准确表达结果的时候,该属性可以帮助用户理解在元素上执行操作后将会发生什么。例如,APP允许影虎在歌曲列表中点击标题来播放相应的歌曲,每一行的 accessibilityLabel 不会告知用户该结果。可以通过该属性,为每一行设置“播放歌曲”提示。在获取元素焦点后,第三个播放,默认为 nil

  • accessibilityFrame 属性 当元素(如按钮)尺寸过小时可以通过设置该 frame 使其更容易点击,设置该属性并不会改变 UI 的 frame。如果不想让系统读取该元素,可以将该属性设置为 CGRectZero,效果等同于将 accessibilityLabelaccessibilityHint 属性都设置为 nil,并且 accessibilityTraits 属性设置为UIAccessibilityTraitNone

  • accessibilityValue 属性 元素的值,使用本地化语言。用在 UISliderUITextField 等控件上,用来描述元素的值。

  • isAccessibilityElement 属性 这是一个 Boolean 值,默认为 NO,用于设置是否支持盲人模式。UIKit 默认是 YES ,但 UIImageView 需要单独打开。该方式的唯一的例外是,如果这个视图作为承载其他可访问项目的容器,那么就应该实现 UIAccessibilityContainer 协议,并将该属性设置为 NO

  • accessibilityElementsHidden 属性 这是一个 Boolean 值。默认值为 NO。可以使用该属性隐藏视图,隐藏的视图在屏幕上依然是可见的,不过不能获取用户操作的焦点。开发者可以设置该属性来隐藏 VoiceOver 用户不需要关注的视图瞬间变化。例如,当用户调整设置音量时,VoiceOver 就不需要去描述出现的调整声音的半透明视图,因为操作会通过听觉反馈给用户。 一般的,isAccessibilityElement 属性设置为 NO,那么系统只会读取 accessibilityLabel 的内容。如果将该 accessibilityElementsHidden 设置为 YES 后,accessibilityLabel 也将不会被读取。

参考链接