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 属性
该属性是用来描述控件内容是什么,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也将不会被读取。
参考链接
- iOS盲人模式小结
- UIAccessibility 非正式协议