Vylepšení usnadnění VoiceOver pro dynamické prvky uživatelského rozhraní
Při vytváření inkluzivní aplikace pro iOS vývojáři často čelí jedinečným výzvám s funkcí VoiceOver. Častou otázkou je, zda se text přístupnosti UIView může dynamicky přizpůsobovat na základě směru pohybu zaostření. 🧭
Představte si rozvržení s Horním štítkem, pohledem na kolekci fungujícím jako mřížka buněk a Spodním štítkem. Každá buňka v zobrazení kolekce je nezávisle přístupná, což uživatelům čteček obrazovky poskytuje zjednodušené prostředí. Někdy však výchozí chování přístupnosti plně nesplňuje potřeby uživatele.
Když například uživatel přejde z Top Label do první buňky v zobrazení kolekce, může být užitečné poskytnout další kontext, jako je „Tabulka s n řádky a sloupci“. To zvyšuje přehlednost a použitelnost, zejména pro mřížky nebo složité datové struktury.
Na druhou stranu, při zpětné navigaci, od Spodního štítku zpět k poslední buňce, může přizpůsobení textu učinit interakce intuitivnější a hladší. Pojďme se ponořit do toho, jak lze této dynamické úpravy dosáhnout ve Swift na příkladech z reálného světa. 🚀
Příkaz | Příklad použití |
---|---|
UIAccessibility.elementFocusedNotification | Toto oznámení se spustí vždy, když se fokus VoiceOveru změní na nový prvek. Je to nezbytné pro dynamickou aktualizaci štítků usnadnění v reakci na směr zaměření. |
UIAccessibility.focusedElementUserInfoKey | Používá se k extrahování aktuálně zaměřeného prvku ze slovníku userInfo oznámení, což umožňuje identifikaci konkrétního aktivního UIView. |
didUpdateFocusIn | Metoda delegování v UICollectionViewDelegate, volaná při každé změně fokusu v pohledu kolekce. Je to užitečné pro implementaci dynamického chování, jako je aktualizace štítků na základě směru zaměření. |
UIFocusAnimationCoordinator | Tento objekt umožňuje plynulé animace při změně fokusu, což zlepšuje uživatelský dojem, když jsou prvky usnadnění aktualizovány dynamicky. |
customAccessibilityLabel | Vlastní vlastnost přidaná do podtřídy UICollectionViewCell pro ukládání a správu dynamických popisků přístupnosti na základě směru fokusu. |
context.nextFocusedView | Poskytuje UIView, který se chystá získat fokus, což je klíčové pro určení a použití správného označení přístupnosti pro daný prvek. |
context.previouslyFocusedView | Identifikuje UIView, který měl dříve fokus, což umožňuje kontextová rozhodnutí, jako je přidání dalšího kontextu při přechodu fokusu. |
NotificationCenter.default.addObserver | Registruje pozorovatele, který bude naslouchat konkrétním oznámením, jako jsou změny fokusu VoiceOver, a umožní tak vlastní chování při přijetí těchto oznámení. |
selector | Určuje metodu, která se má provést při přijetí oznámení. Umožňuje například zpracování UIAccessibility.elementFocusedNotification přizpůsobeným způsobem. |
accessibilityLabel | Vlastnost UIAccessibility, která poskytuje text popisující prvek. Tato vlastnost je v příkladu přepsána, aby dynamicky zahrnovala další kontext. |
Optimalizace štítků usnadnění s dynamickým zaměřením
V prvním příkladu skriptu používáme metodu `didUpdateFocusIn` z protokolu UICollectionViewDelegate ke sledování přesunu fokusu VoiceOver mezi prvky. Tato metoda umožňuje vývojářům detekovat jak dříve zaměřený pohled, tak následující, takže je ideální pro kontextové úpravy. Kontrolou, zda je dalším zaměřeným pohledem UICollectionViewCell, skript dynamicky aktualizuje vlastnost accessibilityLabel s relevantním kontextem. Například při přesunu fokusu z horního štítku na buňku kolekce přidáme informace jako „,“ poskytuje další přehlednost pro uživatele spoléhající na asistenční technologie. 🧑💻
Druhý skript využívá širší přístup pomocí NotificationCenter a naslouchá `UIAccessibility.elementFocusedNotification`. Toto oznámení vysílá změny v zaměření VoiceOver v celé aplikaci. Zpracováním tohoto oznámení skript dynamicky určí, který prvek je aktivní, a podle toho aktualizuje jeho accessibilityLabel. Tento přístup je zvláště užitečný, když více komponent ve složitém uživatelském rozhraní potřebuje podobné aktualizace s důrazem na zaměření. Představte si například mřížku interaktivních karet, kde každá karta mění svůj popis na základě směru zaměření – to je efektivně řešeno pomocí upozornění.
Oba přístupy jsou modulární a opakovaně použitelné. První skript je úzce integrován s UICollectionView, takže je ideálním řešením pro uživatelská rozhraní silně založená na zobrazeních kolekce. Na druhou stranu je skript založený na oznámeních flexibilnější a funguje dobře v různých rozvrženích, jako jsou mřížky kombinované se štítky a tlačítky. Použití vlastních vlastností, jako je `customAccessibilityLabel` zajišťuje, že aktualizace textu usnadnění nenaruší základní funkce prvků uživatelského rozhraní. Například v cestovní aplikaci, když se pozornost přesune na cílovou kartu, mohou podrobnosti karty dynamicky zahrnovat, zda je součástí seznamu doporučených položek nebo doporučení, což obohatí uživatelský dojem. ✈️
Klíčem k těmto implementacím je zajistit, aby accessibilityLabel byl stručný a zároveň popisný. Přidání směrového kontextu při posunu fokusu může zabránit zmatení uživatelů procházejících složitými rozhraními. Například zadáním „Top Label to Cell 1, table“ mohou uživatelé porozumět jak své pozici v uživatelském rozhraní, tak struktuře, se kterou interagují. Tato promyšlená integrace funkcí usnadnění nejen splňuje pokyny WCAG, ale také vytváří intuitivní prostředí zaměřené na uživatele. Obě řešení zajišťují, že přístupnost zůstane prvotřídním občanem při vývoji aplikací pro iOS.
Text dynamického usnadnění v systému iOS založený na směru zaměření
Toto řešení se zaměřuje na programování Swift a využívá funkce usnadnění přístupu UIKit k dynamickému přizpůsobení označení přístupnosti prvků uživatelského rozhraní na základě směru zaměření.
// Approach 1: Using Accessibility Focus Delegates
import UIKit
class AccessibleCollectionViewCell: UICollectionViewCell {
override var accessibilityLabel: String? {
get {
return customAccessibilityLabel
}
set {
customAccessibilityLabel = newValue
}
}
private var customAccessibilityLabel: String?
}
class ViewController: UIViewController, UICollectionViewDelegate {
@IBOutlet weak var topLabel: UILabel!
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var bottomLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
collectionView.delegate = self
}
func collectionView(_ collectionView: UICollectionView,
didUpdateFocusIn context: UICollectionViewFocusUpdateContext,
with coordinator: UIFocusAnimationCoordinator) {
if let nextFocusedCell = context.nextFocusedView as? AccessibleCollectionViewCell {
let direction = context.previouslyFocusedView is UILabel ? "table with n Rows, n Columns" : ""
nextFocusedCell.accessibilityLabel = "\(nextFocusedCell.customAccessibilityLabel ?? ""), \(direction)"
}
}
}
Nastavení dynamického zaostření pomocí pozorovatelů upozornění
Tento přístup využívá NotificationCenter společnosti Swift k naslouchání změnám zaměření VoiceOveru a dynamické aktualizaci štítků usnadnění.
// Approach 2: Using Notification Center
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
private var lastFocusedElement: UIView?
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(handleFocusChange),
name: UIAccessibility.elementFocusedNotification,
object: nil)
}
@objc private func handleFocusChange(notification: Notification) {
guard let userInfo = notification.userInfo,
let focusedElement = userInfo[UIAccessibility.focusedElementUserInfoKey] as? UIView else { return }
if let cell = focusedElement as? UICollectionViewCell,
lastFocusedElement is UILabel {
cell.accessibilityLabel = "\(cell.accessibilityLabel ?? ""), table with n Rows, n Columns"
}
lastFocusedElement = focusedElement
}
}
Vytváření dynamických a kontextových přístupů
Přístupnost je základním kamenem vývoje moderních aplikací, zejména pro platformy jako iOS, kde pomocné nástroje jako VoiceOver hrají klíčovou roli. Jemným, ale často přehlíženým aspektem je schopnost poskytovat dynamický kontext založený na směru zaměření navigace. Implementací logiky, která sleduje, zda se fokus přesouvá shora dolů nebo naopak, mohou vývojáři do textu přístupnosti prvků přidat smysluplné detaily a obohatit tak uživatelskou zkušenost. Například v aplikaci galerie založené na mřížce mohou buňky popsat svou polohu a kontext, když se fokus přesune z nadpisu do mřížky, což uživatelům pomůže pochopit jejich místo ve struktuře. 🔍
Dalším zásadním bodem je, že tato dynamická úprava není omezena na UICollectionView. Lze jej také použít na další prvky, jako je UITableView, zásobníky nebo vlastní zobrazení. Pokud například uživatel projde tabulkou s více sekcemi, záhlaví může přidat kontext k řádkům pod nimi, když fokus vstupuje do sekce nebo ji opouští. To zajišťuje, že uživatelé procházející pomocí VoiceOver mohou získat prostorové a hierarchické povědomí o rozhraní bez dalšího úsilí, což podporuje použitelnost a shodu se standardy WCAG. 🎯
Kromě základních případů použití tato technika podporuje také pokročilé vzorce interakce. Například ve vzdělávací aplikaci, když kvízová otázka získá pozornost, může oznámit podrobnosti, jako je číslo otázky, celkový počet zbývajících otázek nebo dokonce rady k tématu. Takové detaily zvyšují zapojení a snižují kognitivní zátěž pro uživatele spoléhající na asistenční technologie. Vývojáři musí upřednostnit tato dynamická vylepšení, aby zajistili, že jejich aplikace budou efektivně a inkluzivně sloužit různému publiku. 🌍
- Jak zjistíte změny zaměření VoiceOveru?
- Můžete použít poslouchat změny zaměření.
- Jaký je nejlepší způsob aktualizace štítků přístupnosti?
- Použití kombinace a vlastní vlastnosti, jako např , je efektivní pro dynamické aktualizace.
- Mohou dynamické štítky zlepšit použitelnost pro nestandardní rozvržení uživatelského rozhraní?
- Ano, přizpůsobením popisů pro mřížky, tabulky nebo vlastní zobrazení poskytujete uživatelům lepší pochopení struktury uživatelského rozhraní.
- Jaké problémy vznikají s kontextovými štítky?
- Zajištění konzistence mezi přechody zaostření může být složité. Testování v různých navigačních scénářích je nezbytné.
- Jak mohou být tyto techniky opakovaně použitelné napříč projekty?
- Vytvoření obslužného programu nebo základní třídy pro správu aktualizací zaměřených na fokus je efektivním řešením pro opětovné použití.
Dynamický text pro usnadnění obohacuje navigaci, zejména ve složitých rozvrženích, jako jsou mřížky nebo zobrazení kolekce. Přidáním kontextu k přechodům zaměření, jako je oznamování řádků a sloupců, mohou uživatelé lépe porozumět své pozici v rozhraní. Tento přístup zajišťuje inkluzivitu a použitelnost pro širší publikum.
Použití těchto technik v aplikacích v reálném světě, jako jsou vzdělávací platformy nebo galerie, zvyšuje jejich funkčnost. Přizpůsobení se vzorům uživatelské navigace odráží promyšlený design. Vývojáři by měli upřednostňovat přístupnost od základu a zajistit soulad s standardy a aplikace pro tvorbu, které uspokojí různé potřeby uživatelů. 🌍
- Podrobná dokumentace na UIApřístupnost , vysvětlující funkce usnadnění v UIKit a jejich aplikacích.
- Postřehy a příklady z oficiálního průvodce Apple na Přizpůsobení přístupnosti , s praktickými tipy pro vývojáře.
- Diskuse komunity o dynamickém VoiceOveru se zaměřují na správu Přetečení zásobníku , včetně řešení pro konkrétní případy použití.