翻譯:iOS視圖控制器編程指南(六)——支持可訪問性(Supporting Accessibility)

一個(gè)可訪問的app可以讓任何人使用,包括哪些殘疾或物理認(rèn)知障礙的人,作為一個(gè)有用的工具,保留其功能和可用性。為了可訪問,一個(gè)iOS 應(yīng)用必須提供VoiceOver用戶界面元素信息,這樣讓視覺障礙的用戶可以與這些元素交互。UIKit對象默認(rèn)可訪問,但你仍然可以從視圖控制器角度做一些事情解決可訪問性,如下:

· 確保每個(gè)用戶界面的元素可訪問,包括控件和靜態(tài)元素如label。

· 確??稍L問元素提供準(zhǔn)確和有用的信息。

通過編程的方式設(shè)置VoiceOver焦點(diǎn)位置,響應(yīng)特殊VoiceOver手勢,觀察可訪問性通知,可以增強(qiáng)VoiceOver用戶體驗(yàn)。

移動(dòng)VoiceOver光標(biāo)到一個(gè)特定的元素

當(dāng)你的應(yīng)用present新視圖到屏幕上,考慮設(shè)置VoiceOver光標(biāo)的位置。當(dāng)屏幕的布局發(fā)生變化,VoiceOver焦點(diǎn),也成為VoiceOver光標(biāo),重置其位置到屏幕從左到右從上到下的第一個(gè)元素。將光標(biāo)移動(dòng)到更合適的元素可以加速界面的用戶導(dǎo)航。例如,當(dāng)push一個(gè)新視圖控制器到導(dǎo)航控制器的堆棧上,VoiceOver光標(biāo)會(huì)落到導(dǎo)航欄的后退按鈕上。你可能希望移動(dòng)光標(biāo)到導(dǎo)航欄或新push的頁面的一個(gè)元素上。

為了改變光標(biāo)的位置,使用 UIAccessibilityPostNotification函數(shù)推送UIAccessibilityScreenChangedNotification通知。通知告訴VoiceOver屏幕上的內(nèi)容發(fā)生變化。當(dāng)推送通知時(shí),光標(biāo)定位到你指定的元素上,如列表6-1所示。

列表6-1 推送一個(gè)可訪問性通知可以改變讀出的第一個(gè)元素

<pre><code>

  1. @implementation MyViewController
    • (void)viewDidAppear:(BOOL)animated {
  2. [super viewDidAppear:animated];
  3. // The second parameter is the new focus element.
  4. UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, self.myFirstElement);
  5. }
  6. @end
    </pre></code>

布局變化,包括旋轉(zhuǎn)引起的變化,會(huì)重置VoiceOver光標(biāo)的位置。當(dāng)視圖控制器的布局發(fā)生變化,推送UIAccessibilityLayoutChangedNotification通知。類似UIAccessibilityScreenChangedNotification 通知,可以指定對象成為VoiceOver的第一個(gè)元素。

響應(yīng)特殊VoiceOver手勢

VoiceOver定義了五個(gè)特殊動(dòng)作觸發(fā)特定的應(yīng)用動(dòng)作。

· Escape。兩個(gè)手指Z形手勢,關(guān)閉模態(tài)對話框或返回到導(dǎo)航層級(jí)結(jié)構(gòu)。

· Magic Tap。雙指雙擊執(zhí)行最想執(zhí)行的動(dòng)作。

· Three-Finger Scroll。三指劃動(dòng)垂直或水平滾動(dòng)內(nèi)容。

· Increment。一個(gè)手指向上劃動(dòng)增加元素的值。

· Decrement。一個(gè)手指向下劃動(dòng)減少元素的值。

使用這些手勢執(zhí)行視圖和視圖控制器的特定任務(wù)。UIKit查找實(shí)現(xiàn)相關(guān)手勢的方法。它使用responder鏈從VoiceOver聚焦的元素開始搜索方法。如果沒有對象實(shí)現(xiàn)合適的方法,UIKit為該手勢執(zhí)行默認(rèn)系統(tǒng)動(dòng)作。例如,如果在當(dāng)前視圖或應(yīng)用代理中沒有找到magic tap的實(shí)現(xiàn),magic tap手勢播放和暫停音樂應(yīng)用的音樂播放。

雖然可以采取任何行動(dòng)處理程序,VoiceOver用戶期望應(yīng)用的行為遵循一定的準(zhǔn)則。像其他手勢,VoiceOver手勢的實(shí)現(xiàn)應(yīng)該遵循模式,這樣與可訪問應(yīng)用的交互仍然是直觀的。

注意

所有特殊VoiceOver手勢方法返回一個(gè)布爾值,該值確定是否通過響應(yīng)鏈傳播。停止傳播,返回YES。否則,返回NO。

Escape

使用 accessibilityPerformEscape方法處理Escape手勢。對于覆蓋內(nèi)容的視圖。例如模態(tài)對話框或彈框,使用該方法移除覆蓋。Escape手勢的功能就像鍵盤上Esc鍵的功能;它取消臨時(shí)對話框或顯示主要內(nèi)容的表單。你可以使用Escape手勢返回到自定義導(dǎo)航層級(jí)結(jié)構(gòu)。如果使用UINavigationController 對象,你不需要實(shí)現(xiàn)這個(gè)手勢,該對象已經(jīng)處理這個(gè)手勢。

Magic Tap

使用 accessibilityPerformMagicTap方法處理Magic Tap手勢。Magic Tap手勢可以非常迅速執(zhí)行常用或最想用的行為。例如,在手機(jī)應(yīng)用中,Magic Tap可以接起或掛斷電話,在時(shí)鐘應(yīng)用中,Magic Tap啟動(dòng)或停止秒表??梢允褂眠@個(gè)手勢來觸發(fā)VoiceOver光標(biāo)突出顯示的元素的其他動(dòng)作。在應(yīng)用中處理Magic Tap手勢,需在應(yīng)用代理中實(shí)現(xiàn)accessibilityPerformMagicTap 方法。

Three-Finger Scroll

當(dāng)一個(gè)VoiceOver用戶執(zhí)行一個(gè)three-finger scroll手勢,使用accessibilityScroll: 方法滾動(dòng)自定義視圖的內(nèi)容。自定義視圖顯示書籍的一頁,可以使用該手勢翻頁。傳遞給該方法的參數(shù)表示滾動(dòng)的方向。

Increment and Decrement

使用 accessibilityIncrementaccessibilityDecrement方法來增加或減少元素的值。UIAccessibilityTraitAdjustable 特征的元素必須使用該方法。

監(jiān)聽可訪問性通知

UIKit發(fā)送可訪問性通知告知應(yīng)用相關(guān)的事件。應(yīng)用對象可以監(jiān)聽任何相關(guān)通知,并使用它們執(zhí)行適當(dāng)?shù)娜蝿?wù)。例如,當(dāng)VoiceOver說完最后一行,iBook應(yīng)用使用通知來翻頁并繼續(xù)閱讀。這種行為提供了一個(gè)無縫不間斷的閱讀體驗(yàn)。

使用默認(rèn)通知中心來注冊一個(gè)可訪問性通知的觀察者。列表6-2中的例子展示了一個(gè)視圖記錄閱讀通知是成功還是被用戶打斷。

列表6-2 注冊可訪問性通知的觀察者

<pre><code>

  1. @implementation MyViewController
    • (void)viewDidLoad
  2. {
  3. [super viewDidLoad];
  4. [[NSNotificationCenter defaultCenter]
  5. addObserver:self
  6. selector:@selector(didFinishAnnouncement:)
  7. name:UIAccessibilityAnnouncementDidFinishNotification
  8. object:nil];
  9. }
    • (void)didFinishAnnouncement:(NSNotification *)dict
  10. {
  11. NSString *valueSpoken = [[dict userInfo] objectForKey:UIAccessibilityAnnouncementKeyStringValue];
  12. NSString *wasSuccessful = [[dict userInfo] objectForKey:UIAccessibilityAnnouncementKeyWasSuccessful];
  13. // ...
  14. }
  15. @end
    </pre></code>

另一個(gè)有用的通知是UIAccessibilityVoiceOverStatusChanged通知??梢允褂迷撏ㄖ獊頇z測VoiceOver是否開啟。如果應(yīng)用暫停時(shí),通知出現(xiàn),接收到通知后應(yīng)用返回到前臺(tái)。

關(guān)于可以監(jiān)聽的可訪問性通知列表,參見UIAccessibility協(xié)議參考( UIAccessibilityProtocol Reference)。

官方原文地址:

https://developer.apple.com/library/prerelease/ios/featuredarticles/ViewControllerPGforiPhoneOS/SupportingAccessibility.html#//apple_ref/doc/uid/TP40007457-CH12-SW1

VoiceOver光標(biāo)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容