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

一個可訪問的app可以讓任何人使用郭赐,包括哪些殘疾或物理認知障礙的人更振,作為一個有用的工具鲫趁,保留其功能和可用性斯嚎。為了可訪問,一個iOS 應用必須提供VoiceOver用戶界面元素信息挨厚,這樣讓視覺障礙的用戶可以與這些元素交互堡僻。UIKit對象默認可訪問,但你仍然可以從視圖控制器角度做一些事情解決可訪問性疫剃,如下:

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

· 確背布郏可訪問元素提供準確和有用的信息牲阁。

通過編程的方式設置VoiceOver焦點位置,響應特殊VoiceOver手勢壤躲,觀察可訪問性通知城菊,可以增強VoiceOver用戶體驗。

移動VoiceOver光標到一個特定的元素

當你的應用present新視圖到屏幕上碉克,考慮設置VoiceOver光標的位置凌唬。當屏幕的布局發(fā)生變化,VoiceOver焦點漏麦,也成為VoiceOver光標客税,重置其位置到屏幕從左到右從上到下的第一個元素。將光標移動到更合適的元素可以加速界面的用戶導航唁奢。例如霎挟,當push一個新視圖控制器到導航控制器的堆棧上,VoiceOver光標會落到導航欄的后退按鈕上麻掸。你可能希望移動光標到導航欄或新push的頁面的一個元素上酥夭。

為了改變光標的位置,使用 UIAccessibilityPostNotification函數推送UIAccessibilityScreenChangedNotification通知。通知告訴VoiceOver屏幕上的內容發(fā)生變化熬北。當推送通知時疙描,光標定位到你指定的元素上,如列表6-1所示讶隐。

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

<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>

布局變化起胰,包括旋轉引起的變化,會重置VoiceOver光標的位置巫延。當視圖控制器的布局發(fā)生變化效五,推送UIAccessibilityLayoutChangedNotification通知。類似UIAccessibilityScreenChangedNotification 通知炉峰,可以指定對象成為VoiceOver的第一個元素畏妖。

響應特殊VoiceOver手勢

VoiceOver定義了五個特殊動作觸發(fā)特定的應用動作。

· Escape疼阔。兩個手指Z形手勢戒劫,關閉模態(tài)對話框或返回到導航層級結構。

· Magic Tap婆廊。雙指雙擊執(zhí)行最想執(zhí)行的動作迅细。

· Three-Finger Scroll。三指劃動垂直或水平滾動內容淘邻。

· Increment茵典。一個手指向上劃動增加元素的值。

· Decrement列荔。一個手指向下劃動減少元素的值敬尺。

使用這些手勢執(zhí)行視圖和視圖控制器的特定任務。UIKit查找實現相關手勢的方法贴浙。它使用responder鏈從VoiceOver聚焦的元素開始搜索方法砂吞。如果沒有對象實現合適的方法,UIKit為該手勢執(zhí)行默認系統(tǒng)動作崎溃。例如蜻直,如果在當前視圖或應用代理中沒有找到magic tap的實現,magic tap手勢播放和暫停音樂應用的音樂播放袁串。

雖然可以采取任何行動處理程序概而,VoiceOver用戶期望應用的行為遵循一定的準則。像其他手勢囱修,VoiceOver手勢的實現應該遵循模式赎瑰,這樣與可訪問應用的交互仍然是直觀的。

注意

所有特殊VoiceOver手勢方法返回一個布爾值破镰,該值確定是否通過響應鏈傳播餐曼。停止傳播压储,返回YES。否則源譬,返回NO集惋。

Escape

使用 accessibilityPerformEscape方法處理Escape手勢。對于覆蓋內容的視圖踩娘。例如模態(tài)對話框或彈框刮刑,使用該方法移除覆蓋。Escape手勢的功能就像鍵盤上Esc鍵的功能养渴;它取消臨時對話框或顯示主要內容的表單雷绢。你可以使用Escape手勢返回到自定義導航層級結構。如果使用UINavigationController 對象厚脉,你不需要實現這個手勢习寸,該對象已經處理這個手勢。

Magic Tap

使用 accessibilityPerformMagicTap方法處理Magic Tap手勢傻工。Magic Tap手勢可以非常迅速執(zhí)行常用或最想用的行為。例如孵滞,在手機應用中中捆,Magic Tap可以接起或掛斷電話,在時鐘應用中坊饶,Magic Tap啟動或停止秒表泄伪。可以使用這個手勢來觸發(fā)VoiceOver光標突出顯示的元素的其他動作匿级。在應用中處理Magic Tap手勢蟋滴,需在應用代理中實現accessibilityPerformMagicTap 方法。

Three-Finger Scroll

當一個VoiceOver用戶執(zhí)行一個three-finger scroll手勢痘绎,使用accessibilityScroll: 方法滾動自定義視圖的內容津函。自定義視圖顯示書籍的一頁,可以使用該手勢翻頁孤页。傳遞給該方法的參數表示滾動的方向尔苦。

Increment and Decrement

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

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

UIKit發(fā)送可訪問性通知告知應用相關的事件允坚。應用對象可以監(jiān)聽任何相關通知,并使用它們執(zhí)行適當的任務蛾号。例如稠项,當VoiceOver說完最后一行,iBook應用使用通知來翻頁并繼續(xù)閱讀鲜结。這種行為提供了一個無縫不間斷的閱讀體驗展运。

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

列表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>

另一個有用的通知是UIAccessibilityVoiceOverStatusChanged通知乐疆』裕可以使用該通知來檢測VoiceOver是否開啟。如果應用暫停時挤土,通知出現琴庵,接收到通知后應用返回到前臺。

關于可以監(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光標
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咖杂,隨后出現的幾起案子庆寺,更是在濱河造成了極大的恐慌,老刑警劉巖诉字,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懦尝,死亡現場離奇詭異,居然都是意外死亡壤圃,警方通過查閱死者的電腦和手機陵霉,發(fā)現死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伍绳,“玉大人踊挠,你說我怎么就攤上這事〕迳保” “怎么了效床?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長权谁。 經常有香客問我剩檀,道長,這世上最難降的妖魔是什么闯传? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任谨朝,我火速辦了婚禮,結果婚禮上甥绿,老公的妹妹穿的比我還像新娘字币。我一直安慰自己,他們只是感情好共缕,可當我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布洗出。 她就那樣靜靜地躺著,像睡著了一般图谷。 火紅的嫁衣襯著肌膚如雪翩活。 梳的紋絲不亂的頭發(fā)上阱洪,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音菠镇,去河邊找鬼冗荸。 笑死,一個胖子當著我的面吹牛利耍,可吹牛的內容都是我干的蚌本。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼隘梨,長吁一口氣:“原來是場噩夢啊……” “哼程癌!你這毒婦竟也來了?” 一聲冷哼從身側響起轴猎,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤嵌莉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捻脖,有當地人在樹林里發(fā)現了一具尸體锐峭,經...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年可婶,在試婚紗的時候發(fā)現自己被綠了只祠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡扰肌,死狀恐怖,靈堂內的尸體忽然破棺而出熊杨,到底是詐尸還是另有隱情曙旭,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布晶府,位于F島的核電站桂躏,受9級特大地震影響,放射性物質發(fā)生泄漏川陆。R本人自食惡果不足惜剂习,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望较沪。 院中可真熱鬧鳞绕,春花似錦、人聲如沸尸曼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽控轿。三九已至冤竹,卻和暖如春拂封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹦蠕。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工冒签, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钟病。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓萧恕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親档悠。 傳聞我的和親對象是個殘疾皇子廊鸥,可洞房花燭夜當晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內容