基于iOS平台的盲用软件无障碍设计思想浅析

2019-01-28 06:41高沛友胡安娜安俊英
互联网天地 2018年11期
关键词:普通用户控件界面

□ 文 高沛友 胡安娜 安俊英

软件无障碍设计是指通过技术手段,使任何人都能成功的浏览、理解和使用所开发的应用。一款设计良好的软件应可供所有能力的用户使用,包括低视力、全盲、听力障碍、认知障碍或运动障碍的用户。改进产品的无障碍功能可以增强所有用户的可用性,尤其对于残障用户,这将对其产生不可估量的积极作用。本文主要针对视障用户的使用特点,浅谈工作中iOS平台软件无障碍设计思想与理念,以供其他开发者借鉴。

一、面向视障用户的软件无障碍设计现状

视障用户使用iOS平台的服务和软件,需要借助一款屏幕阅读器——VoiceOver。这是苹果推出的一项辅助功能,他可以把屏幕上的内容用语音的方式朗读出来,并且配合一些简单的交互方式,可使朗读的焦点在整个屏幕上的不同元素之间切换。这样视障用户也可以正常操作软件的各项功能。Voice Over从2009年推出至今已经有10年历史。最早只能在iPod音乐播放器中使用,经过不断发展,现在该功能已经覆盖安装mac OS、iOS、w atch OS,甚至tv OS系统的全系列产品。同时,苹果还提供了一套非常方便的API,让开发者支持Voice Over成为举手之劳,从而将iOS软件无障碍设计水平提升到前所未有的高度。

开发完全支持VoiceOv er的iOS应用,首先需掌握如何使用VoiceOver,可以在通用->辅助功能->Voic e Over找到并且开启。为方便测试,建议开发者将辅助功能快捷键设置成Voic e Over,只需要连按三次Home键就能开启/关闭VoiceOver。VoiceOver开启后,可以尝试Voic e Over练习功能,该功能将会引导开发人员做最基本的Voic e Over手势。在开发中最基本的手势包括:单指触摸屏幕上的元素进行选择,单指双击屏幕任意位置对刚刚选择的元素进行点击,单指左右滑动屏幕按空间顺序切换屏幕上的元素,双指在屏幕上做1.5次折返运动退出当前界面(如先向右,再向左,再向右,或先向上,再向下,再向上等),三指上下左右滑动滚动当前选择的View。这几个手势涵盖了日常使用的大部分场景,只要软件能兼容这些操作,应用就可基本实现无障碍访问。

可以被Voic e Ov er访问的UI元素称为无障碍元素(Ac cessibility Element)。当视障用户单指触摸一个无障碍元素,该元素将被选中,VoiceOver会将其的信息读出来。该信息包括元素的无障碍标签(Accessibility Label),无障碍提示(Accessibility Hint)以及无障碍元素的形状、位置和状态等。单指点击屏幕任意位置两次,激活当前元素的默认动作。如当前无障碍元素是一个按钮,那么执行的就是按钮的Ac tion事件。双指在屏幕上做1.5次折返运动,响应的是v iew的Pop或Dismiss事件,可根据软件设计需要进行设置。三指上下左右滑动,触发的是View的ScrollView事件。在软件开发中,UIKit中的绝大多数控件在默认状态下已经被设置为无障碍元素,不用做什么特殊支持,视障用户就可以使用Voic e Over访问这些元素。但如果遇到比较复杂的场景,或与明眼用户存在交互差异的情况,需要开发人员掌握一定的无障碍设计理念,才能完成一个软件的无障碍支持。

二、面向视障用户的软件无障碍设计思想

1.保证视觉传达与听觉传达的同步性

视觉传达是通过视觉传递信息的方式,是普通用户获取信息的主要方式。听觉传达是是通过声音传达信息的方式,是视障用户获取信息的主要方式。由于绝大多数开发者是明眼人,设计界面和功能时大多从视觉传达的角度出发,所有交互设计都以满足普通用户为主,往往忽视了以视觉传达为主的视障用户的可访问性。10年前如果想同时满足视觉和听觉传达的设计方案将非常复杂,需要投入大量资源去开发和维护。但随着苹果VoiceOver的横空出世,随着iOS平台软件无障碍设计的不断完善,推出的这套完善的A PI,使同时满足普通用户和视障用户的访问需求变得轻而易举。但在实际的开发工作中,还有一些要点需要注意,这主要体现在以下几个方面:

对非文本控件元素的处理。如果一个控件已经设置了title属性,在绝大多数情况下你不用做任何事情,这个控件就能被Voic e Ov er读出。但在软件设计中,由于界面美观的需要,我们现在很少使用纯文本的控件元素,一般都会由美术工程师给元素设计相应的图标,然后构建一个纯图片的控件。在这种情况下,很多开发者会省略title,或随便编写一些提示性的字符串。这会对视障用户的浏览造成严重影响,他们将无法通过Voice Over获取到控件的title,自然也无法知道控件的作用。要解决这个问题,请务必为其设置accessibility Label,这个属性在NSOb je c t上面,用于存储视障用户触摸该元素时所播报的提示。另外还有ac c essibilit y Hint属性,用于存储更进一步的提示,当视障用户触摸该元素,播报完title或Accessibility Label2秒后,将播报此提示。该属性往往用于功能较复杂的元素。比如开发一个播放器,在播放器上三指左滑切换上一曲、三指右滑切换下一曲,这种复杂的操作提示就可以放在Accessibility Hint中。这部分最后需做Localization设置,让不同语言的视障用户都能享受到无障碍浏览的乐趣。

对UI元素状态变化的处理。有时候我们会碰到一种场景,在十个元素里面,选择了其中三个,这个时候UI已经发生了变化,普通用户可以看到元素是被选中的。但是Voic e Over不一定能识别这种视觉变化,如果他读取不到控件的selected属性,将无法播报元素的状态。所以当控件有selec ted属性时请务必更新该属性,而不仅仅是UI上面做出一些变化。如果控件没有这个属性,也可以通过手动给ac c essibility Label加上“已选择”的文案,从而达到视觉传达与听觉传达的同步性。

2.重视由繁入简的通道补偿设计

普通用户以视觉通道为获取信息的主要路径,通过视觉传达能获取70%以上的信息。而视障用户只能依靠听觉通道作为信息获取的主要路径,接收的信息远远少于视觉传达。这就需要开发人员通过“通道补偿设计”,弥补听觉传达的损失。尤其是在一些复杂场景下,更加需要这种化繁为简的设计思想。在iOS平台的软件开发中,需要特别留意以下几方面内容:

对控件嵌套的处理。在开发中,有时一个控件里会套着多个控件,这种控件的空间结构和隶属关系相对复杂,Voice Over通常无法聚焦到每一个控件上,也无法向用户描述界面的结构和功能。当视障用户触摸底层控件时,Voice Over会将所有子视图的title连在一起读出来,令使用者难以分辨,非常混乱。针对这种情况,开发人员需要把最底层的控件设置成非无障碍元素(self.is Ac c essibility Element =NO),然后分别对他子视图的Accessibility Label属性进行设置。这样设计,就将一个复杂的嵌套结构简化成了几个简单的控件元素,大大提高了视障用户的可访问性。

对重绘的处理。在自定义控件中,常常使用重绘来构建所需要的元素,但这却成为视障用户浏览界面时最大的障碍。因为重绘的元素无法直接设置为无障碍元素,使用VoiceOver无法读出元素的title,无法描述元素的位置和形状,无法响应单指双击执行默认动作的手势。这个元素对于视障用户来说就是有障碍的,是不可访问的。但得益于iOS这套无障碍A PI的设计,就可以比较简单的支持Voic e Over的操作。在一个容器上重绘时,需要按照UIAccessibility Container的方式,将重绘的每一个独立的元素都描述成UIAccessibilityElement的实例,再进行无障碍元素的设置。这个承载重绘元素的控件称为Accessibility Cont ainer。在开发时,Access ibility Container的isAccessibilityElement值必须设置为false,另外如需要创建出所有的UIAccessibility Element的实例,然后赋给accessibility Elements各项属性。通过up dateAccessibleElements的方法更新、维护所有的UIAc c essibility Element实例,当界面上的内容发生变化,或者Voice Over开启关闭状态发生变化时,调用此方法可以更新accessibilityElements的信息。

3.合理利用iOS平台的无障碍特性

相比普通用户,视障用户在使用特点和浏览习惯上均有其特殊性。在iOS平台上,多数无障碍需求可以通过修改无障碍元素的属性和方法轻松实现。但如果想追求更加全面的无障碍体验,还需使用无障碍API中的一些特性,有针对性的做一些工作。

对ac c essibility Perform Esc ap e方法的处理。普通用户使用软件时如想退出当前界面通常情况下需要点击界面左上角的返回按钮,但这个操作对于视障用户来说并不是太方便。尤其当该按钮需要经常点击时更是如此。Voice Over有一个比较复杂的手势,双指沿着任意方向在屏幕上做1.5次折返运动,用于退出当前界面。最常见的使用场景是响应普通用户的右滑返回或退出一个View Controller。视障用户使用该手势时,会触发accessibilityPerformEscap e方法,这时你可以响应自己想要的退出动作,比如Dismiss或者Pop。

对ac c essibilityPerformMagicTap方法的处理。在开发中描述相关联的一组信息往往用到好几个元素。例如描述一本电子书的信息,可能包含书名、作者、定价、上市日期四个元素。普通用户通过视觉可快速获取全部。但对于视障用户则必须触摸屏幕4次,或者左右滑动4次才能获取到全部信息,无论浏览的效率还是操作的便捷性都不能令人满意。那有没有能兼顾普通用户和视障用户的方案呢?回答是肯定的。可以将四个元素合并成一个无障碍元素,该元素的无障碍标签可以显示4个元素无障碍标签的合并值。这样可以减少在冗余元素之间切换的时间,大大提高视障用户的浏览效率。如果合并的元素是多个可操作的按钮时,可以考虑使用accessibility Perform Magic Tap方法。该方法的Action会弹出列表样式的UIAlert Controller来供用户操作。

对A c c essibilit y Not ific at ion的处理。Ac c essibilit y提供了一系列的通知,可以完成一些特定的需求。比如你可监听UIAccessibi lity Voice Over Status Changed通知,来监控Voic e Over开启和关闭的状态,或Ap p中发送的通知,使系统触发某个事件。当你界面上的AccessibilityElement有变动的时候你可以发送UIAccessibility Layout Changed Notification通知,通知发送时使用UIAccessibility的专用的方法,UIAccessibility Post Notification函数有两个参数,第一个是通知名,第二个是VoiceOver读出来的字符串或者是Voice Over所聚焦的新元素。这就妥善的解决了视障用户获取通知的问题,如执行进度、操作状态等提示。

综上所述,本文对iOS平台面向视障用户的软件无障碍设计思想和常用开发技巧进行梳理。通过梳理不难发现,实现软件无障碍设计并不复杂,一旦成为开发中的习惯,支持无障碍将会是一件轻松的事情。他既不会影响现有的UI设计,也不会给开发和测试带来很多负担,更不会对软件的功能造成影响。因此,希望通过本文能够引起开发人员足够的重视,让软件开发中的无障碍设计成为一种习惯。可能开发人员的一项随手操作,就会给视障用户群体带来极大方便。■

猜你喜欢
普通用户控件界面
基于C++Builder 的电子邮件接收程序设计*
不同截面类型钢管RPC界面粘结性能对比研究
基于小红书UGC模式的城市形象传播研究
使用“填表单”微信小程序 统计信息很方便
新媒体对中国传媒产业产生的影响
微重力下两相控温型储液器内气液界面仿真分析
基于.net的用户定义验证控件的应用分析
国企党委前置研究的“四个界面”
离线发文件 不是会员也能用
Spreadsheet控件在Delphi数据库系统中的编程与应用