□ 文 高沛友 胡安娜 安俊英
軟件無障礙設(shè)計是指通過技術(shù)手段,使任何人都能成功的瀏覽、理解和使用所開發(fā)的應(yīng)用。一款設(shè)計良好的軟件應(yīng)可供所有能力的用戶使用,包括低視力、全盲、聽力障礙、認知障礙或運動障礙的用戶。改進產(chǎn)品的無障礙功能可以增強所有用戶的可用性,尤其對于殘障用戶,這將對其產(chǎn)生不可估量的積極作用。本文主要針對視障用戶的使用特點,淺談工作中iOS平臺軟件無障礙設(shè)計思想與理念,以供其他開發(fā)者借鑒。
視障用戶使用iOS平臺的服務(wù)和軟件,需要借助一款屏幕閱讀器——VoiceOver。這是蘋果推出的一項輔助功能,他可以把屏幕上的內(nèi)容用語音的方式朗讀出來,并且配合一些簡單的交互方式,可使朗讀的焦點在整個屏幕上的不同元素之間切換。這樣視障用戶也可以正常操作軟件的各項功能。Voice Over從2009年推出至今已經(jīng)有10年歷史。最早只能在iPod音樂播放器中使用,經(jīng)過不斷發(fā)展,現(xiàn)在該功能已經(jīng)覆蓋安裝mac OS、iOS、w atch OS,甚至tv OS系統(tǒng)的全系列產(chǎn)品。同時,蘋果還提供了一套非常方便的API,讓開發(fā)者支持Voice Over成為舉手之勞,從而將iOS軟件無障礙設(shè)計水平提升到前所未有的高度。
開發(fā)完全支持VoiceOv er的iOS應(yīng)用,首先需掌握如何使用VoiceOver,可以在通用->輔助功能->Voic e Over找到并且開啟。為方便測試,建議開發(fā)者將輔助功能快捷鍵設(shè)置成Voic e Over,只需要連按三次Home鍵就能開啟/關(guān)閉VoiceOver。VoiceOver開啟后,可以嘗試Voic e Over練習(xí)功能,該功能將會引導(dǎo)開發(fā)人員做最基本的Voic e Over手勢。在開發(fā)中最基本的手勢包括:單指觸摸屏幕上的元素進行選擇,單指雙擊屏幕任意位置對剛剛選擇的元素進行點擊,單指左右滑動屏幕按空間順序切換屏幕上的元素,雙指在屏幕上做1.5次折返運動退出當前界面(如先向右,再向左,再向右,或先向上,再向下,再向上等),三指上下左右滑動滾動當前選擇的View。這幾個手勢涵蓋了日常使用的大部分場景,只要軟件能兼容這些操作,應(yīng)用就可基本實現(xiàn)無障礙訪問。
可以被Voic e Ov er訪問的UI元素稱為無障礙元素(Ac cessibility Element)。當視障用戶單指觸摸一個無障礙元素,該元素將被選中,VoiceOver會將其的信息讀出來。該信息包括元素的無障礙標簽(Accessibility Label),無障礙提示(Accessibility Hint)以及無障礙元素的形狀、位置和狀態(tài)等。單指點擊屏幕任意位置兩次,激活當前元素的默認動作。如當前無障礙元素是一個按鈕,那么執(zhí)行的就是按鈕的Ac tion事件。雙指在屏幕上做1.5次折返運動,響應(yīng)的是v iew的Pop或Dismiss事件,可根據(jù)軟件設(shè)計需要進行設(shè)置。三指上下左右滑動,觸發(fā)的是View的ScrollView事件。在軟件開發(fā)中,UIKit中的絕大多數(shù)控件在默認狀態(tài)下已經(jīng)被設(shè)置為無障礙元素,不用做什么特殊支持,視障用戶就可以使用Voic e Over訪問這些元素。但如果遇到比較復(fù)雜的場景,或與明眼用戶存在交互差異的情況,需要開發(fā)人員掌握一定的無障礙設(shè)計理念,才能完成一個軟件的無障礙支持。
視覺傳達是通過視覺傳遞信息的方式,是普通用戶獲取信息的主要方式。聽覺傳達是是通過聲音傳達信息的方式,是視障用戶獲取信息的主要方式。由于絕大多數(shù)開發(fā)者是明眼人,設(shè)計界面和功能時大多從視覺傳達的角度出發(fā),所有交互設(shè)計都以滿足普通用戶為主,往往忽視了以視覺傳達為主的視障用戶的可訪問性。10年前如果想同時滿足視覺和聽覺傳達的設(shè)計方案將非常復(fù)雜,需要投入大量資源去開發(fā)和維護。但隨著蘋果VoiceOver的橫空出世,隨著iOS平臺軟件無障礙設(shè)計的不斷完善,推出的這套完善的A PI,使同時滿足普通用戶和視障用戶的訪問需求變得輕而易舉。但在實際的開發(fā)工作中,還有一些要點需要注意,這主要體現(xiàn)在以下幾個方面:
對非文本控件元素的處理。如果一個控件已經(jīng)設(shè)置了title屬性,在絕大多數(shù)情況下你不用做任何事情,這個控件就能被Voic e Ov er讀出。但在軟件設(shè)計中,由于界面美觀的需要,我們現(xiàn)在很少使用純文本的控件元素,一般都會由美術(shù)工程師給元素設(shè)計相應(yīng)的圖標,然后構(gòu)建一個純圖片的控件。在這種情況下,很多開發(fā)者會省略title,或隨便編寫一些提示性的字符串。這會對視障用戶的瀏覽造成嚴重影響,他們將無法通過Voice Over獲取到控件的title,自然也無法知道控件的作用。要解決這個問題,請務(wù)必為其設(shè)置accessibility Label,這個屬性在NSOb je c t上面,用于存儲視障用戶觸摸該元素時所播報的提示。另外還有ac c essibilit y Hint屬性,用于存儲更進一步的提示,當視障用戶觸摸該元素,播報完title或Accessibility Label2秒后,將播報此提示。該屬性往往用于功能較復(fù)雜的元素。比如開發(fā)一個播放器,在播放器上三指左滑切換上一曲、三指右滑切換下一曲,這種復(fù)雜的操作提示就可以放在Accessibility Hint中。這部分最后需做Localization設(shè)置,讓不同語言的視障用戶都能享受到無障礙瀏覽的樂趣。
對UI元素狀態(tài)變化的處理。有時候我們會碰到一種場景,在十個元素里面,選擇了其中三個,這個時候UI已經(jīng)發(fā)生了變化,普通用戶可以看到元素是被選中的。但是Voic e Over不一定能識別這種視覺變化,如果他讀取不到控件的selected屬性,將無法播報元素的狀態(tài)。所以當控件有selec ted屬性時請務(wù)必更新該屬性,而不僅僅是UI上面做出一些變化。如果控件沒有這個屬性,也可以通過手動給ac c essibility Label加上“已選擇”的文案,從而達到視覺傳達與聽覺傳達的同步性。
普通用戶以視覺通道為獲取信息的主要路徑,通過視覺傳達能獲取70%以上的信息。而視障用戶只能依靠聽覺通道作為信息獲取的主要路徑,接收的信息遠遠少于視覺傳達。這就需要開發(fā)人員通過“通道補償設(shè)計”,彌補聽覺傳達的損失。尤其是在一些復(fù)雜場景下,更加需要這種化繁為簡的設(shè)計思想。在iOS平臺的軟件開發(fā)中,需要特別留意以下幾方面內(nèi)容:
對控件嵌套的處理。在開發(fā)中,有時一個控件里會套著多個控件,這種控件的空間結(jié)構(gòu)和隸屬關(guān)系相對復(fù)雜,Voice Over通常無法聚焦到每一個控件上,也無法向用戶描述界面的結(jié)構(gòu)和功能。當視障用戶觸摸底層控件時,Voice Over會將所有子視圖的title連在一起讀出來,令使用者難以分辨,非常混亂。針對這種情況,開發(fā)人員需要把最底層的控件設(shè)置成非無障礙元素(self.is Ac c essibility Element =NO),然后分別對他子視圖的Accessibility Label屬性進行設(shè)置。這樣設(shè)計,就將一個復(fù)雜的嵌套結(jié)構(gòu)簡化成了幾個簡單的控件元素,大大提高了視障用戶的可訪問性。
對重繪的處理。在自定義控件中,常常使用重繪來構(gòu)建所需要的元素,但這卻成為視障用戶瀏覽界面時最大的障礙。因為重繪的元素無法直接設(shè)置為無障礙元素,使用VoiceOver無法讀出元素的title,無法描述元素的位置和形狀,無法響應(yīng)單指雙擊執(zhí)行默認動作的手勢。這個元素對于視障用戶來說就是有障礙的,是不可訪問的。但得益于iOS這套無障礙A PI的設(shè)計,就可以比較簡單的支持Voic e Over的操作。在一個容器上重繪時,需要按照UIAccessibility Container的方式,將重繪的每一個獨立的元素都描述成UIAccessibilityElement的實例,再進行無障礙元素的設(shè)置。這個承載重繪元素的控件稱為Accessibility Cont ainer。在開發(fā)時,Access ibility Container的isAccessibilityElement值必須設(shè)置為false,另外如需要創(chuàng)建出所有的UIAccessibility Element的實例,然后賦給accessibility Elements各項屬性。通過up dateAccessibleElements的方法更新、維護所有的UIAc c essibility Element實例,當界面上的內(nèi)容發(fā)生變化,或者Voice Over開啟關(guān)閉狀態(tài)發(fā)生變化時,調(diào)用此方法可以更新accessibilityElements的信息。
相比普通用戶,視障用戶在使用特點和瀏覽習(xí)慣上均有其特殊性。在iOS平臺上,多數(shù)無障礙需求可以通過修改無障礙元素的屬性和方法輕松實現(xiàn)。但如果想追求更加全面的無障礙體驗,還需使用無障礙API中的一些特性,有針對性的做一些工作。
對ac c essibility Perform Esc ap e方法的處理。普通用戶使用軟件時如想退出當前界面通常情況下需要點擊界面左上角的返回按鈕,但這個操作對于視障用戶來說并不是太方便。尤其當該按鈕需要經(jīng)常點擊時更是如此。Voice Over有一個比較復(fù)雜的手勢,雙指沿著任意方向在屏幕上做1.5次折返運動,用于退出當前界面。最常見的使用場景是響應(yīng)普通用戶的右滑返回或退出一個View Controller。視障用戶使用該手勢時,會觸發(fā)accessibilityPerformEscap e方法,這時你可以響應(yīng)自己想要的退出動作,比如Dismiss或者Pop。
對ac c essibilityPerformMagicTap方法的處理。在開發(fā)中描述相關(guān)聯(lián)的一組信息往往用到好幾個元素。例如描述一本電子書的信息,可能包含書名、作者、定價、上市日期四個元素。普通用戶通過視覺可快速獲取全部。但對于視障用戶則必須觸摸屏幕4次,或者左右滑動4次才能獲取到全部信息,無論瀏覽的效率還是操作的便捷性都不能令人滿意。那有沒有能兼顧普通用戶和視障用戶的方案呢?回答是肯定的??梢詫⑺膫€元素合并成一個無障礙元素,該元素的無障礙標簽可以顯示4個元素無障礙標簽的合并值。這樣可以減少在冗余元素之間切換的時間,大大提高視障用戶的瀏覽效率。如果合并的元素是多個可操作的按鈕時,可以考慮使用accessibility Perform Magic Tap方法。該方法的Action會彈出列表樣式的UIAlert Controller來供用戶操作。
對A c c essibilit y Not ific at ion的處理。Ac c essibilit y提供了一系列的通知,可以完成一些特定的需求。比如你可監(jiān)聽UIAccessibi lity Voice Over Status Changed通知,來監(jiān)控Voic e Over開啟和關(guān)閉的狀態(tài),或Ap p中發(fā)送的通知,使系統(tǒng)觸發(fā)某個事件。當你界面上的AccessibilityElement有變動的時候你可以發(fā)送UIAccessibility Layout Changed Notification通知,通知發(fā)送時使用UIAccessibility的專用的方法,UIAccessibility Post Notification函數(shù)有兩個參數(shù),第一個是通知名,第二個是VoiceOver讀出來的字符串或者是Voice Over所聚焦的新元素。這就妥善的解決了視障用戶獲取通知的問題,如執(zhí)行進度、操作狀態(tài)等提示。
綜上所述,本文對iOS平臺面向視障用戶的軟件無障礙設(shè)計思想和常用開發(fā)技巧進行梳理。通過梳理不難發(fā)現(xiàn),實現(xiàn)軟件無障礙設(shè)計并不復(fù)雜,一旦成為開發(fā)中的習(xí)慣,支持無障礙將會是一件輕松的事情。他既不會影響現(xiàn)有的UI設(shè)計,也不會給開發(fā)和測試帶來很多負擔,更不會對軟件的功能造成影響。因此,希望通過本文能夠引起開發(fā)人員足夠的重視,讓軟件開發(fā)中的無障礙設(shè)計成為一種習(xí)慣??赡荛_發(fā)人員的一項隨手操作,就會給視障用戶群體帶來極大方便?!?/p>