版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2020.02.17 星期一 |
前言
iOS中有關視圖控件用戶能看到的都在UIKit框架里面,用戶交互也是通過UIKit進行的。感興趣的參考上面幾篇文章。
1. UIKit框架(一) —— UIKit動力學和移動效果(一)
2. UIKit框架(二) —— UIKit動力學和移動效果(二)
3. UIKit框架(三) —— UICollectionViewCell的擴張效果的實現(一)
4. UIKit框架(四) —— UICollectionViewCell的擴張效果的實現(二)
5. UIKit框架(五) —— 自定義控件:可重復使用的滑塊(一)
6. UIKit框架(六) —— 自定義控件:可重復使用的滑塊(二)
7. UIKit框架(七) —— 動態尺寸UITableViewCell的實現(一)
8. UIKit框架(八) —— 動態尺寸UITableViewCell的實現(二)
9. UIKit框架(九) —— UICollectionView的數據異步預加載(一)
10. UIKit框架(十) —— UICollectionView的數據異步預加載(二)
11. UIKit框架(十一) —— UICollectionView的重用、選擇和重排序(一)
12. UIKit框架(十二) —— UICollectionView的重用、選擇和重排序(二)
13. UIKit框架(十三) —— 如何創建自己的側滑式面板導航(一)
14. UIKit框架(十四) —— 如何創建自己的側滑式面板導航(二)
15. UIKit框架(十五) —— 基于自定義UICollectionViewLayout布局的簡單示例(一)
16. UIKit框架(十六) —— 基于自定義UICollectionViewLayout布局的簡單示例(二)
17. UIKit框架(十七) —— 基于自定義UICollectionViewLayout布局的簡單示例(三)
18. UIKit框架(十八) —— 基于CALayer屬性的一種3D邊欄動畫的實現(一)
19. UIKit框架(十九) —— 基于CALayer屬性的一種3D邊欄動畫的實現(二)
20. UIKit框架(二十) —— 基于UILabel跑馬燈類似效果的實現(一)
21. UIKit框架(二十一) —— UIStackView的使用(一)
22. UIKit框架(二十二) —— 基于UIPresentationController的自定義viewController的轉場和展示(一)
23. UIKit框架(二十三) —— 基于UIPresentationController的自定義viewController的轉場和展示(二)
24. UIKit框架(二十四) —— 基于UICollectionViews和Drag-Drop在兩個APP間的使用示例 (一)
25. UIKit框架(二十五) —— 基于UICollectionViews和Drag-Drop在兩個APP間的使用示例 (二)
26. UIKit框架(二十六) —— UICollectionView的自定義布局 (一)
27. UIKit框架(二十七) —— UICollectionView的自定義布局 (二)
28. UIKit框架(二十八) —— 一個UISplitViewController的簡單實用示例 (一)
29. UIKit框架(二十九) —— 一個UISplitViewController的簡單實用示例 (二)
30. UIKit框架(三十) —— 基于UICollectionViewCompositionalLayout API的UICollectionViews布局的簡單示例(一)
31. UIKit框架(三十一) —— 基于UICollectionViewCompositionalLayout API的UICollectionViews布局的簡單示例(二)
32. UIKit框架(三十二) —— 替換Peek and Pop交互的基于iOS13的Context Menus(一)
33. UIKit框架(三十三) —— 替換Peek and Pop交互的基于iOS13的Context Menus(二)
開始
首先看下寫作內容
在此iOS
accessibility
教程中,學習如何使用VoiceOver
和Accessibility inspector
使應用程序更易于訪問
接著看一下寫作環境
Swift 5, iOS 13, Xcode 11
各行各業,各個年齡段,背景不同的人都在使用智能手機應用程序,其中包括殘疾人。 在設計應用時要考慮可訪問性,以幫助所有人(包括視力,運動,學習或聽力障礙者)使用它們。
在本iOS accessibility
教程中,您將轉換現有的應用程序,以使視力障礙人士更容易使用它。 在此過程中,您將學習如何:
- 使用
VoiceOver
。 - 使用
Accessibility Inspector
檢查您的應用。 - 使用
UIKit
實現可訪問性元素。 - 為殘疾人建立更好的用戶體驗。
本教程需要Xcode 11.3
和Swift 5.1
。 假定您已經了解Swift開發的基礎知識。
注意:您需要使用物理設備才能使用
VoiceOver
。 目前模擬器中不支持此accessibility
功能。
在本教程中,您將使用一個已經完成的名為Recipe
的應用程序,其中包含食譜及其難度級別的列表。 它還可以讓您評估自己制作的菜肴的質量。
在開始文件夾中打開Recipe.xcodeproj
。
您需要先配置簽名,然后才能在設備上運行該應用程序。
為此,請在導航器中單擊Recipe
項目,然后選擇具有相同名稱的目標。 選擇Signing & Capabilities
標簽,然后確保已在頂部選擇Debug
。 最后,從下拉列表中選擇您的團隊。
Getting to Know the Recipe App
現在,構建并運行該應用程序以熟悉其功能。
根控制器是配方的表格視圖,其中包含圖像,說明和難度等級。 點擊某個食譜,查看包含食譜的成分和說明的大圖。
為了使事情變得更加令人興奮,您還可以劃掉列表中的項目,以確保您擁有所有必需的成分。 如果您喜歡或討厭自己的作品,則可以切換喜歡/不喜歡的表情符號。
Behind the Scenes of the Recipe App
花幾分鐘來熟悉一下begin
項目中的代碼。以下是一些要點:
-
Main.storyboard包含該應用程序的所有
storyboard scenes
。您會注意到所有UI組件都是標準的UIKit
控件和視圖。它們已經可以訪問,這使您的工作更加輕松。 -
RecipeListViewController.swift管理根表視圖,該視圖顯示所有可用配方的列表。它使用一個
Recipe
對象數組作為數據源。 - Recipe.swift是代表配方的模型對象。它包含用于加載一系列食譜的實用程序方法,您將在整個應用程序中使用該食譜。
-
RecipeCell.swift是根控制器的配方列表的單元格。它根據傳遞的“配方”
Recipe
模型對象顯示配方的難度級別,名稱和照片。 -
RecipeInstructionViewController.swift包含詳細視圖的控制器代碼,該代碼顯示了菜肴的大圖及其成分和烹飪說明。它具有一個
UISegmentedControl
,可在表格視圖中的成分和指令之間切換,該表格視圖使用InstructionViewModel
。 -
InstructionViewModel.swift用作
RecipeInstructionsViewController
的數據源。它包括成分和說明的描述以及復選框的狀態信息。 - InstructionCell.swift定義一個單元格,該單元格包含一個標簽和一個復選框,用于說明和成分列表。選中該框時,它會劃掉文本。
現在,您已經了解了該應用程序的工作原理,是時候考慮如何使其更易于使用了。
Why Accessibility?
在開始使用代碼之前,了解可訪問性accessibility
的好處很重要。
- 設計應用程序的可訪問性,無論您使用的是
KIF
框架還是Xcode中的UI Testing
,都使編寫功能測試變得更加容易。 - 您還可以通過使更多人使用您的應用來擴大您的市場和用戶基礎。
- 如果您在任何政府機構工作,都必須遵守 508 compliance,該法規規定所有用戶都必須可以使用任何件或技術。
- 在您的應用中實現可訪問性表明您愿意為每個用戶加倍努力,這是一件好事。
- 很高興知道您正在為某人的生活帶來微小但明顯的改變!
說服了嗎?然后是時候了解VoiceOver
,這是一種針對視障人士的輔助功能工具。
Enabling VoiceOver
iOS隨附VoiceOver
屏幕閱讀工具,該工具可幫助用戶與軟件進行交互而無需查看屏幕。 專為視力障礙人士設計。
VoiceOver
可以使視障用戶聽到并與屏幕上可見的內容進行互動。 VoiceOver
會響應手勢,并以聲音方式向用戶傳達屏幕上的內容或用戶選擇的內容。 本質上,VoiceOver
是UI和用戶的觸摸輸入之間的鏈接。
使用VoiceOver
的最快方法是打開iOS設備上的Settings
應用程序,選擇Accessibility ? Accessibility Shortcut
,然后選擇VoiceOver
。
這會創建一個快捷方式,因此您可以在物理設備上點按主屏幕按鈕(或用于較新手機的側面按鈕),以打開或關閉VoiceOver
。
注意:除了
VoiceOver
之外,還有許多其他輔助功能,包括“反轉顏色”,“增加對比度”,“彩色濾鏡”,“減少白點”,“縮放”,“切換控制”(Invert Colors, Increase Contrast, Color Filters, Reduce White Point, Zoom, Switch Control )
等等。 在本教程中,您將主要關注VoiceOver
。
現在,您啟用了VoiceOver
,現在該嘗試一下了。
How to Use VoiceOver
VoiceOver
帶有一些方便的手勢預設,可以輕松瀏覽應用程序。 以下是與VoiceOver
一起使用的一些更常見的應用內手勢:
- 輕按一下屏幕上的任意位置,
VoiceOver
將大聲讀取該項目的輔助功能屬性中的識別信息。 - 左右滑動一次,
VoiceOver
將選擇下一個可見的輔助功能項目并大聲讀出。 右揮桿向前和向下移動,而左揮桿則相反。 - 一次輕掃即可逐字母拼寫重點項目。
- 雙擊選擇重點項目。
- 左右滑動三指可在頁面視圖中向前或向后導航。
有關VoiceOver
手勢的完整列表,請查看Apple在iPhone上的Learn VoiceOver手勢 - Apple’s Learn VoiceOver gestures on iPhone。 因此,現在您知道VoiceOver
的工作原理了-但是您的應用程序如何運行呢? 您將在下一步中對其進行測試。
Trying VoiceOver With the Recipe App
在物理設備上構建并運行,然后三次單擊home
按鈕以打開VoiceOver
。 左右滑動可瀏覽食譜列表。 VoiceOver
從左上到右下讀取元素。 它以標題名稱開頭,后跟每個配方的名稱以及相關圖像的名稱。
但是VoiceOver
體驗存在一些問題:
- 1) 圖像不是每個單元格中圖像視圖的有用描述。 您知道其中有圖像,但不知道那是什么。
- 2)
VoiceOver
并沒有說明每種食譜的難度級別,從而使該功能對視力障礙者無效。
現在,您已經確定了問題區域,您可能想直接解決這些問題。 但是在您這樣做之前,您需要了解一些有關輔助功能的工作原理。
Accessibility Attributes
Accessibility attributes
是您必須實現以支持可訪問性的核心組件。 這些屬性為VoiceOver
提供有關應用程序中元素的信息,因此VoiceOver
可以將這些信息大聲讀出給用戶。 如果未正確配置它們,則VoiceOver
將無法提供有關您的應用程序的必要詳細信息。
Accessibility attributes
具有五個屬性:
- 1)
Label
:標識控件或視圖的簡潔方法。 例如返回按鈕和配方圖像。 - 2)
Traits
:這些特性描述元素的狀態,行為或用法。 例如,可能選擇了一個按鈕特征。 - 3)
Hint
:描述元素完成的操作。 例如:顯示配方詳細信息。 - 4)
Frame
:屏幕內元素的frame
,格式為CGRect
。VoiceOver
會說出CGRect
的內容。 - 5)
Value
:元素的值。 例如,使用進度條或滑塊,當前值可能顯示為:100中的5。
大多數UIKit
組件都為您預置了這些屬性。 您只需要提供詳細信息即可改善用戶體驗。 如果創建自定義控件,則必須自己提供大多數屬性。
因此,現在您知道VoiceOver
在何處獲取向用戶提供的信息,是時候了解一種新工具,該工具將幫助您查找和修復應用程序中的accessibility weaknesses:Accessibility Inspector
。
Using the Accessibility Inspector
如果您要對某個應用進行改造以使其更易于訪問,則發現weaknesses
既耗時又容易出錯。 幸運的是,有一個名為Accessibility Inspector
的工具可以執行以下操作:
- 在您的應用中運行,并發現常見的可訪問性問題。
- 使您可以在
Inspection Mode
下檢查UI元素的可訪問性屬性。 - 在不離開應用程序的情況下提供可訪問性元素的實時預覽。
- 支持所有平臺,包括
macOS,iOS,watchOS
和tvOS
。
在Recipes
上使用Accessibility Inspector
之前,請先查看一下該工具。 首先,通過導航至Xcode ? Open Developer Tool ? Accessibility Inspector
,在Xcode菜單中將其打開。
inspector
應如下所示:
target chooser
使您可以選擇要檢查的設備。 這可能是您的MacBook Pro
,iOS設備或模擬器。
accessibility elements
的實時預覽可讓您在模擬器中進行測試。 由于實時預覽比收聽VoiceOver
更快,因此在本iOS輔助功能教程中,您將在此處完成大部分工作。
在模擬器中構建并運行,然后將Accessibility Inspector
目標更改為模擬器:
現在您已經打開了該工具,現在可以查看它的一些最有用的功能。
Using the Inspection Pointer
注意:在撰寫本文時,最新版本的
Xcode 11.3
有一個bug
,使您無法可靠地使用此工具。
選擇Inspection Pointer
,在檢查器UI中看起來像是標線瞄準器,類似于在設備上啟用VoiceOver
。 激活指針時,可以將鼠標懸停在任何UI元素上以檢查其屬性。 通過按鈕直接與模擬器交互將禁用檢查指針。
Inspection Detail
窗格包含您需要查看并與應用程序中的accessibility attributes
進行交互的所有內容:
-
Basic
:顯示當前突出顯示的元素的屬性。 -
Actions
:使您可以執行諸如點擊按鈕或滾動視圖之類的動作。 按此窗格中的Perform
按鈕將對目標執行操作。 -
Element
:顯示當前項目的類,地址和控制器。 在撰寫本文時,它不能始終如一地工作。 -
Hierarchy
:顯示元素的視圖層次結構,使您更容易理解復雜的視圖。
Using Quicklook to Check Audio in Xcode
Xcode 11
在Inspection Detail
窗格頂部的Quicklook
部分中具有一項新功能,可讓您在Xcode中模擬您在設備上聽到的音頻。 這意味著您可以在不使用實際設備的情況下檢查用戶在使用應用程序時聽到的聲音。
當應用程序在模擬器中運行時,按播放Play
按鈕,讓Accessibility Inspector
循環瀏覽該應用程序,并大聲聆聽它描述每個元素的過程。
如果您希望手動瀏覽每個元素,則可以按“暫停”按鈕或按Quicklook
部分中的Audio
按鈕。 按“前進”或“后退”按鈕以您自己的步調逐步瀏覽每個組件。
使用此功能比在設備上運行應用程序和使用VoiceOver
更快,尤其是在開發過程中。 與往常一樣,您還希望在真實設備上測試您的應用及其所有輔助功能。
Highlighting Problems With the Inspector Audit
Inspector Audit
最有用的功能之一是它的audit capability
,該功能會向您發出有關應用程序內可訪問性問題的警告。 要試用此功能,請確保模擬器仍在運行,并且您在配方列表中。 在檢查器中,單擊Audit icon
,然后單擊Run audit
。
您會看到檢查器給出幾個警告,包括您的某些元素缺乏描述。
單擊警告時,Xcode
會突出顯示模擬器中以及Inspector Audit
屏幕底部的相關元素。
在這種情況下,與單元格關聯的圖像視圖沒有描述。 這意味著VoiceOver
無法將其描述給您的讀者。
單擊Suggest Fixes
圖標(看起來像一個問號,圈出一個警告),inspector
將提供有關解決問題的建議。 您稍后將根據這些建議采取行動。
單擊Eye
圖標拍攝該應用程序的快照。 這對于需要創建準確的錯誤報告的質量保證人員很有用。
您可以在檢查器中找到一些有用的accessibility settings
。 接下來,您將快速瀏覽這些功能。
Additional Inspector Settings
盡管它們不在本教程的討論范圍之內,但是很高興知道Accessibility Inspector
還可以讓您測試以下輔助功能設置:
- 1) 反轉顏色
- 2) 增加對比度
- 3) 降低透明度
- 4) 減少運動
- 5) 更改字體大小
您不再需要使用Settings
應用來啟用這些功能。 Accessibility Inspector
當前僅提供這五個選項,但是Apple計劃在將來添加更多選項。
Accessibility Inspector
可以節省測試應用程序的時間。 但是請記住,您仍然應該手動測試VoiceOver
,以嘗試實際的用戶體驗。 最后一步可幫助您發現inspector
遺漏的任何問題。
現在,您已經瀏覽了Accessibility Inspector
的功能,是時候開始使用您的應用了。
Making the Recipe App Accessible
使用VoiceOver
在設備上測試應用程序時,您注意到圖像的描述不是很有用。 audit tool
向您顯示了原因:圖像視圖沒有可訪問性標簽。 您現在要解決此問題。
在Xcode中,打開RecipeCell.swift
并將以下代碼添加到文件的底部:
// MARK: Accessibility
extension RecipeCell {
func applyAccessibility(_ recipe: Recipe) {
// 1
foodImageView.accessibilityTraits = .image
// 2
foodImageView.accessibilityLabel = recipe.photoDescription
}
}
此代碼根據單元格的Recipe
對象填充缺少的可訪問性屬性。 運作方式如下:
- 1)
accessibilityTraits
掩蓋了表征可訪問性元素的特征。 在這種情況下,.image
表示它是圖像。 - 2) 您可以使用
accessibilityLabel
來描述VoiceOver
中的元素。 在這里,將其設置為recipe.photoDescription
,它是描述圖像內容的字符串。
現在,您也想將其應用于將來的配方。 在RecipeCell
類中找到configureCell(_ :)
。 將以下行添加到方法的末尾:
applyAccessibility(recipe)
每次創建單元格時,此代碼都會使用配方對象中的屬性將可accessibility attributes
應用于圖像。
在設備上構建并運行,然后在主屏幕按鈕上輕按三下即可啟用VoiceOver
。 測試食譜列表,以查看圖像描述是否更有意義。
好多了! 現在,您不僅可以聽到未提供具體細節的Image
,還可以聽到圖像的完整說明。 用戶現在可以可視化食物,而不必因不知道圖像是什么而感到沮喪。
在應用程序仍在模擬器中運行的情況下,再次運行Accessibility Inspector
并導航到配方列表。 確保清除檢查器中的所有警告,然后點擊Run Audit
。
WOOt
- 沒有更多的描述警告! 將說明成功添加到圖像后,現在可以完全訪問此視圖的核心。
現在,該使食譜的難度級別變得可訪問了。
Transforming the Difficulty Labels
在Accessibility Inspector
中,您會看到potentially inaccessible text
警告,該警告告訴您視覺障礙用戶看不到難度標簽。 要解決這些問題,您需要使標簽可訪問并使用有意義的描述更新其屬性。
對于下一步,請轉到RecipeCell.swift
并將以下內容添加到applyAccessibility(_ :)
的末尾:
// 1
difficultyLabel.isAccessibilityElement = true
// 2
difficultyLabel.accessibilityTraits = .none
// 3
difficultyLabel.accessibilityLabel = "Difficulty Level"
// 4
switch recipe.difficulty {
case .unknown:
difficultyLabel.accessibilityValue = "Unknown"
case .rating(let value):
difficultyLabel.accessibilityValue = "\(value)"
}
以下是有關此代碼功能的更多詳細信息:
- 1)
isAccessibilityElement
是一個標志,使該標志為true
時對輔助功能可見。 對于大多數UIKit
類,默認值為true
,但對于UILabel
,則為false
。 - 2)
accessibilityTraits
幫助表征可訪問性元素。 由于不需要任何交互,因此將其設置為沒有特征。 - 3) 接下來,讓
VoiceOver
簡潔地標識該標簽的意圖。Difficulty Level
可讓用戶確切地知道他們正在處理什么。 - 4)
VoiceOver
將讀取accessibilityValue
作為標簽說明的一部分。 在此處設置難度級別會使此元素更加有用。
在物理設備上構建并運行您的應用,請三按主屏幕按鈕以啟用VoiceOver
并在配方列表中滑動。
滾動瀏覽不同的輔助功能元素時,VoiceOver
會讀取每個單元的完整說明,包括難度級別。
Checking for Warnings
每次您公開一個新的輔助功能元素時,就像在此處對難度級別所做的那樣,您應該再次運行audit
。
如果Accessibility Inspector
尚未運行,請啟動它。 在您的設備或模擬器上運行該應用,并相應地設置檢查器目標。 現在,選擇audit
切換按鈕,然后點擊Run audit
。
較少的警告出現! 其余的是關于標簽不支持動態文本的。 接下來,您將對其進行修復。
Making the Text Dynamic
auditor
警告您,您缺少使所有人都能使用您的應用程序的重要步驟:動態文本。 這是可訪問性的一項重要功能,它允許具有部分視力障礙的用戶增加字體大小以提高可讀性。 您的應用當前使用的非動態字體不允許這樣做。
單擊Fix Suggestions
圖標以查看auditor
的建議:
它告訴您使用UIfont
首選字體,并將adjustsFontForContentSizeCategory
設置為true
。 您現在就要做。
在RecipeCell.swift
中,在最底部的applyAccessibility(_ :)
內添加以下代碼:
dishNameLabel.font = .preferredFont(forTextStyle: .body)
dishNameLabel.adjustsFontForContentSizeCategory = true
difficultyLabel.font = .preferredFont(forTextStyle: .body)
difficultyLabel.adjustsFontForContentSizeCategory = true
這會將preferredFont
設置為body
樣式,這意味著iOS
將像文檔主體一樣設置文本樣式。 大小和字體的細節取決于輔助功能設置。 AdjustsFontForContentSizeCategory
指示當用戶更改文本內容大小時字體應自動更新。
借助Accessibility Inspector
,測試應用程序如何處理字體大小調整變得非常容易。
與Accessibility Inspector
一起構建并運行配方應用程序。 再次運行audit
,所有警告都將消失。
Testing Some Other Options
導航到檢查器中的Settings
開關,并嘗試一些工具:
- 1) 反轉顏色可使用此輔助功能預覽界面的外觀。 這對有光敏感,視力不好以及某些情況下色盲的人有用。
- 2) 您也可以為喜歡較大字體大小的用戶實時測試動態字體大小變化。
在測試應用程序時,它可能看起來像這樣:
inspector
使測試可訪問性案例變得容易。 由此,您可以說出食譜列表將對視力障礙的用戶有效。
Transforming the Recipe Detail Screen
現在,您已經完成了食譜選項的列表,現在您想看看當用戶單擊其中一個食譜時會發生什么。 在您的設備上運行該應用,啟用VoiceOver
并查看詳細視圖。 聽起來像這樣:
詳細視圖中的VoiceOver
交互存在一些問題:
- 1) 左箭頭按鈕不是導航的理想說明。 用戶如何知道按鈕的作用?
- 2) 表情符號的面孔狀態為:心臟形狀的眼睛和混雜的面孔。 這些解釋會使任何用戶感到困惑!
- 3) 當用戶選中一個復選框時,它的圖標顯示為
icon empty
。
在每種情況下,重要的是要解釋控制狀態的含義,而不是其外觀。 Back button
按鈕比Left Arrow button
按鈕清晰。 Like
和Dislike
簡要解釋表情符號。 接下來,您將進行這兩項更改。
要更改導航,請打開RecipeInstructionsViewController.swift
并在assert(recipe!= nil)
之后將以下內容添加到viewDidLoad
中:
backButton.accessibilityLabel = "back"
backButton.accessibilityTraits = .button
VoiceOver
現在會顯示Back button
按鈕,而不是Left Arrow button
按鈕。
現在,進入表情符號。 在同一文件中,將isLikedFood(_ :)
的內容替換為以下內容:
if liked {
likeButton.setTitle("??", for: .normal)
likeButton.accessibilityLabel = "Like"
likeButton.accessibilityTraits = .button
didLikeFood = true
} else {
likeButton.setTitle("??", for: .normal)
likeButton.accessibilityLabel = "Dislike"
likeButton.accessibilityTraits = .button
didLikeFood = false
}
對于Like
和Dislike
模式,您都添加了一個accessibilityLabel
,該按鈕清楚說明了按鈕的功能。 您還設置了accessibilityTraits
以將其標識為按鈕,以便用戶知道如何與之交互。
在設備上構建并運行,然后啟用VoiceOver
。 使用VoiceOver
導航到詳細配方屏幕,以測試對視圖頂部按鈕的更改。
現在,每個功能都有清晰的簡短說明,可幫助用戶了解其意圖。 好多了!
Improving the Checkboxes
最終問題是清單。 對于每個復選框,VoiceOver
當前都將圖標說明為空,后跟配方說明。 根本不清楚!
要更改此設置,請打開InstructionCell.swift
并查找shouldStrikeThroughText(_ :)
。 將整個if strikeThrough
語句替換為以下內容:
// 1
checkmarkButton.isAccessibilityElement = false
if strikeThrough {
// 2
descriptionLabel.accessibilityLabel = "Completed: \(text)"
attributeString.addAttribute(
NSAttributedString.Key.strikethroughStyle,
value: 2,
range: NSRange(text.startIndex..., in: text))
} else {
// 3
descriptionLabel.accessibilityLabel = "Uncompleted: \(text)"
}
此代碼的作用如下:
- 1) 關閉對勾標記按鈕的可訪問性,因此
VoiceOver
會將其作為一個單元而不是兩個不同的可訪問性元素進行讀取。 - 2) 現在,用于描述的
accessibilityLabel
使用硬編碼的字符串Completed
,后跟文本。 只需訪問標簽即可提供所有必要的信息。 - 3) 與完成的代碼一樣,如果用戶將某項標記為未完成,則在標簽描述之前添加“未完成”。
再次構建并運行該應用程序,并查看其聲音。 它將成為用戶耳中的音樂。
在此iOS accessibility
教程中,您了解了VoiceOver
。 您通過滾動瀏覽每個可訪問元素并親自測試用戶體驗來執行手動審核。 然后,您使用了Accessibility Inspector
進行審核,查看可訪問性元素值并進行實時動態更改以反轉顏色或更改字體大小。
現在,您有了必要的工具,可以使您的應用程序更易于訪問。 知道您將對某人的生活產生積極的影響是有益的。
- Categories of Accessibility
- Accessibility Development Resources
- Applying Accessibility to Custom Views
- Deliver an Exceptional Accessibility Experience
- Accessibility Inspector
后記
本篇主要講述了Accessibility的使用,感興趣的給個贊或者關注~~~