VoiceOver 的使用
-
如何打开
VoiceOver
iPhone 设备:通过设置 - 通用 - 辅助功能 - VoiceOver
打开。 -
如何关闭
VoiceOver
iPhone 设备:三指同时触摸屏幕,连续点击屏幕三下。如果无效可以尝试连续按三下 Home 键。或者通过打开的流程来关闭。 -
VoiceOver 模式下,如何操作?
- 轻点一次来选择项目,比如我们选择一个 App;
- 轻点两次来激活所选项目,比如我们通过该操作打开一个 App;
- 三指轻扫来滚动,如果我们通过该操作滑动屏幕。
iOS 盲人模式开发
UIAccessibility
非正式协议提供了关于 App 用户界面元素的无障碍信息。辅助应用,例如 VoiceOver
,将此消息传递给残障用户,帮助他们使用 App。Apple 为我们提供了相应的 APIs。
标准的 UIKit
控件和视图默认实现了 UIAccessibility
方法,因此默认对辅助应用是可访问的。
UIAccessibility
非正式协议可可以通过 UIAccessibilityElement
类来实现,该类呈现自定义用户界面对象。如果我们自定义了一个 UIView
的子类,开发者需要创建一个 UIAccessibilityElement
实例来呈现它。在这种情况下,开发者要保证正确所有的 UIAccessibility
属性并返回无障碍元素的属性。
-
accessibilityLabel
属性 该属性是用来描述控件内容是什么,UIButton
和UILabel
默认是从title
和text
中获取,UITextField
从输入框的内容获取。如果控件没有提供一个可用于描述的标签,那么我们就需要通过该属性来提供了一个简洁的描述。比如,有一个播放音乐的按钮,APP提供的可能是一个▶️ 的图片告知用户它的作用。为了可无障碍访问,我们可以将该属性设置成“播放音乐”,这样辅助应用就可以将该消息提供给残障用户。需要注意的是,该属性不要包含控件类型的信息(比如设置成“播放音乐按钮”),关于这个关联信息会通过accessibilityTraits
属性来说明。 -
accessibilityTraits
属性 该属性用于描述控件的类型,如它是一个按钮,或者它是一个链接。它结合accessibilityLabel
属性可准确的描述无障碍元素的特征。元素获取焦点后会在第二个播放。比如accessibilityLabel
设置为“登录”,而该属性accessibilityTraits
设置为UIAccessibilityTraitButton
,那么系统就会在无障碍模式下播放“登录按钮”。 -
accessibilityHint
属性 用来描述一个动作。如“播放歌曲”,“购买商品”等。当accessibilityLabel
不能很准确表达结果的时候,该属性可以帮助用户理解在元素上执行操作后将会发生什么。例如,APP允许影虎在歌曲列表中点击标题来播放相应的歌曲,每一行的accessibilityLabel
不会告知用户该结果。可以通过该属性,为每一行设置“播放歌曲”提示。在获取元素焦点后,第三个播放,默认为nil
。 -
accessibilityFrame
属性 当元素(如按钮)尺寸过小时可以通过设置该frame
使其更容易点击,设置该属性并不会改变 UI 的frame
。如果不想让系统读取该元素,可以将该属性设置为CGRectZero
,效果等同于将accessibilityLabel
和accessibilityHint
属性都设置为nil
,并且accessibilityTraits
属性设置为UIAccessibilityTraitNone
。 -
accessibilityValue
属性 元素的值,使用本地化语言。用在UISlider
,UITextField
等控件上,用来描述元素的值。 -
isAccessibilityElement
属性 这是一个Boolean
值,默认为NO
,用于设置是否支持盲人模式。UIKit
默认是YES
,但UIImageView
需要单独打开。该方式的唯一的例外是,如果这个视图作为承载其他可访问项目的容器,那么就应该实现UIAccessibilityContainer
协议,并将该属性设置为NO
。 -
accessibilityElementsHidden
属性 这是一个Boolean
值。默认值为NO
。可以使用该属性隐藏视图,隐藏的视图在屏幕上依然是可见的,不过不能获取用户操作的焦点。开发者可以设置该属性来隐藏VoiceOver
用户不需要关注的视图瞬间变化。例如,当用户调整设置音量时,VoiceOver
就不需要去描述出现的调整声音的半透明视图,因为操作会通过听觉反馈给用户。 一般的,isAccessibilityElement
属性设置为NO
,那么系统只会读取accessibilityLabel
的内容。如果将该accessibilityElementsHidden
设置为YES
后,accessibilityLabel
也将不会被读取。