VoiceOver — az Apple beépített képernyőolvasója (screen reader), amely hangosítja a felület minden elemét, és lehetővé teszi az eszköz gesztusokkal történő vezérlését. A technológia rendszerszinten be van építve az iOS, iPadOS és macOS rendszerekbe, és nem igényel további szoftver telepítését. A Apple Accessibility (2025) adatai szerint a VoiceOver több mint 40 nyelvet támogat, és világszerte milliók vakok és gyengénlátók használják.
Főbb pontok
VoiceOver — egy képernyőolvasó (screen reader), amely be van építve az Apple operációs rendszereibe. Vakok és gyengénlátók számára készült, és teljes körű interakciót biztosít az eszközzel vizuális kapcsolat nélkül. A VoiceOver hangosítja a felület összes elemét: gombokat, hivatkozásokat, szövegeket, képeket, értesítéseket és rendszerelemeket.
A technológiát először 2005-ben mutatták be macOS-re, iOS-en pedig 2009-ben jelent meg az iPhone 3GS-vel. Azóta a VoiceOver az Apple ökoszisztéma szerves részévé és a platform akadálymentesítésének egyik fő érvévé vált. A VoiceOver rendszerszinten be van építve — ez azt jelenti, hogy minden alkalmazásban működik a fejlesztő további integrációja nélkül, bár a hangosítás minősége közvetlenül attól függ, hogy az alkalmazás mennyire jól használja az iOS akadálymentesítési API-ját.
A VoiceOver több mint 40 nyelvet támogat természetes beszédszintézissel, és alkalmazkodik a regionális hangbeállításokhoz. iOS-en a VoiceOver a Siri hangmotorjait használja a magyar és más nyelvekhez, ami a lehető legtermészetesebb hangzást és helyes intonációt biztosítja az írásjelektől és a kontextustól függően.
A VoiceOver elfogja az érintési eseményeket, és másképp értelmezi azokat, mint a szabványos iOS-bevitel. Amikor a felhasználó megérinti a képernyőt, a VoiceOver nem aktiválja az ujj alatti elemet, hanem először hangosítja. Csak a dupla érintés után aktiválódik az elem. Ez a legfontosabb különbség, amely lehetővé teszi a vak felhasználók számára, hogy véletlen kattintás kockázata nélkül fedezzék fel a felületet.
A VoiceOver logikai sorrendben olvassa a felület elemeit: balról jobbra, fentről lefelé. Az olvasási sorrend az iOS nézethierarchiájából öröklődik, de a fejlesztő megváltoztathatja azt az accessibilityElements tulajdonság segítségével összetett elrendezések esetén. A felhasználó az elemek között jobbra (következő) és balra (előző) húzással, valamint egy adott elem megérintésével navigálhat annak hangosításához.
Minden mozgásnál a VoiceOver kimondja az elem típusát (gomb, hivatkozás, címsor), a nevét (accessibilityLabel), állapotát (kiválasztva, letiltva) és a segítséget (accessibilityHint). Ha az elem értéket tartalmaz — például egy hangerőcsúszka —, a VoiceOver azt is hangosítja. Az Accessibility Traits (UIAccessibilityTraits) további információkat ad a felhasználónak az elem viselkedéséről: hogy gomb, kapcsoló, keresés vagy billentyűzetbillentyű-e.
A rotor — egy virtuális beállító gomb, amely váltja a VoiceOver navigációs módját. A felhasználó két ujjal (mint egy hangerőgombot) forgatja a rotort, és kiválasztja a módot: szavak, karakterek, címsorok, hivatkozások, belépési pontok, táblázatsorok és mások. A címsor mód lehetővé teszi a gyors váltást a H1-H6 között weboldalakon és alkalmazásokban, a karakter mód pedig a szöveg betűnkénti kiejtését, ami hasznos űrlapok kitöltésekor vagy megerősítő kódok beírásakor.
A fejlesztő az UIAccessibilityCustomRotor API-n keresztül saját módokat adhat a rotorhoz. Például egy jegyzetalkalmazásban hozzáadható a „Kedvenc jegyzetek" vagy „Legutóbbi változások" rotor. Egyedi rotorok jelentősen felgyorsítják a navigációt bizonyos alkalmazásokban, és a legjobb akadálymentesítési gyakorlatnak számítanak iOS-en.
A VoiceOver saját gesztuskészletet használ, amely nem egyezik a szabványos iOS-gesztusokkal. A legtöbb gesztust egy ujj helyett három ujjal kell végrehajtani — ez megakadályozza az ütközéseket a normál vezérléssel, és lehetővé teszi a VoiceOver számára, hogy egyidejűleg működjön a szabványos bevitellel.
| Művelet | Gesztus | Eredmény |
|---|---|---|
| Elem hangosítása | 1 ujjas érintés | Kimondja az elem nevét |
| Aktiválás | Dupla érintés | Gomb vagy hivatkozás megnyomása |
| Következő elem | Jobbra húzás | Átlépés a következőre |
| Előző elem | Balra húzás | Vissza az előzőhöz |
| Görgetés | 3 ujjas húzás | Lista vagy oldal görgetése |
| Rotor | 2 ujjas forgatás | Navigációs mód váltása |
A dupla érintés gesztus a fő módja az elemek aktiválásának a VoiceOverben. Ha az elem speciális műveletet igényel (például húzást), a VoiceOver az „érintés — dupla érintés és tartás" sorozatot használja a mozgatási módba lépéshez. Ez lehetővé teszi olyan összetett gesztusok végrehajtását, mint a drag-and-drop, anélkül, hogy a képernyőt nézné. A VoiceOver támogatja továbbá a „dupla érintés két ujjal" gesztust a művelet megszakításához és a „háromszoros érintést" a képernyőfüggöny (Screen Curtain) be- és kikapcsolásához.
Egy iOS-alkalmazás fejlesztője jelentősen javíthatja a VoiceOver-rel való interakciót az UIAccessibility API-n keresztül. Az alapvető akadálymentesítési beállítások az Interface Builder-ben (Identity Inspector → Accessibility) adhatók hozzá, de összetett felületek esetén programozott konfigurációra van szükség a kódban.
Az accessibilityLabel tulajdonság határozza meg a szöveget, amelyet a VoiceOver az elemhez kimond. Ha a címke nincs beállítva, a VoiceOver a gomb szövegét vagy a szövegmező helyőrzőjét használja. Szöveg nélküli elemeknél (ikonok, egyedi nézetek) a címke kötelező. Az accessibilityTraits tulajdonság határozza meg az elem típusát: gomb, címsor, kapcsoló, keresés, billentyűzetbillentyű, változó érték, hivatkozás és mások.
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Felhasználói profil"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Megnyitja a profilbeállítások képernyőt"
Az isAccessibilityElement jelző engedélyezi a VoiceOver-támogatást az egyedi nézetekhez — alapértelmezés szerint csak a szabványos elemekre (UIButton, UILabel, UITextField) igaz. Az accessibilityHint paraméter segítséget ad: a VoiceOver egy szünet után mondja ki, ha a felhasználó megáll egy elemen. A Hint a művelet eredményét írja le, nem az utasítást: „Megnyitja a beállítások képernyőt" ahelyett, hogy „Nyomja meg a megnyitáshoz".
Összetett képernyők esetén, ahol az elemek logikai csoportja nem felel meg a vizuális sorrendnek, az accessibilityElements használatos — egy tömb, amely meghatározza az olvasási sorrendet. Például egy termékkártya tartalmazza a képet, nevet, árat és a „Kosárba" gombot. Ha ezek az elemek kaotikusan vannak elrendezve a nézethierarchiában, az accessibilityElements beállítja a helyes sorrendet a VoiceOver számára.
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()
productCard.accessibilityElements = [
productImage, productName, productPrice, addToCartButton
]
Több elem egyetlen elérhető elemmé történő egyesítéséhez az UIAccessibilityContainer vagy az accessibilityFrame használható az érintési terület felülbírálásához. Ez akkor hasznos, ha egy táblázatcella több UI-összetevőt tartalmaz, de logikailag egy elemet képvisel — a VoiceOver-nek az egész cellát egészként kell hangosítania, nem pedig külön-külön átnéznie a tartalmát.
A VoiceOver helyes akadálymentesítési konfigurációja több szempontra való odafigyelést igényel: szemantikus jelölés, dinamikus frissítések, egyedi elemek kezelése és tesztelés valódi screen readerrel.
SwiftUI-ben az akadálymentesítés a .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() és .accessibilityAddTraits() módosítókkal konfigurálható. A SwiftUI automatikusan örökli az akadálymentesítést a szabványos elemekből, de egyedi összetevők esetén explicit konfigurációra van szükség. Például egy egyedi csúszkának tájékoztatnia kell a VoiceOver-t az értékéről és a változás formátumáról.
Slider(value: $volume, in: 0...100)
.accessibilityLabel("Hangerő")
.accessibilityValue(
Text("\(Int(volume)) százalék")
)
.accessibilityAddTraits(.adjustsAudioForAccessibility)
.accessibilityAdjustableAction { direction in
switch direction {
case .increment: volume = min(volume + 5, 100)
case .decrement: volume = max(volume - 5, 0)
}
}
Az accessibilityAdjustableAction módosító lehetővé teszi az érték megváltoztatását VoiceOver-gesztusokkal: felfelé húzás — növelés, lefelé húzás — csökkentés. E módosító nélkül a csúszka elérhetetlen marad a screen readeren keresztüli vezérléshez. Hasonló konfiguráció szükséges az egyedi stepperekhez, pickerekhez és más, értéküket változtató elemekhez.
Amikor a képernyő tartalma dinamikusan változik (megjelent egy értesítés, frissült a betöltési állapot, megváltozott az ár), a VoiceOver-nek értesítést kell kapnia az UIAccessibility.post segítségével. E hívás nélkül a screen reader nem tud a változásokról, és a felhasználó fontos információkat hagy ki. SwiftUI esetén a .accessibilityAnnouncement() módosító használható.
UIAccessibility.post(
notification: .announcement,
argument: "Az ár 20 százalékkal csökkent"
)
// SwiftUI
Text("Az ár frissítve")
.accessibilityAnnouncement(Text("20% kedvezmény"))
A VoiceOver-értesítéseket ésszerűen kell használni: a túlzott bejelentések irritálják a felhasználót, hiányuk pedig elérhetetlenné teszi az alkalmazást. Az optimális stratégia — csak azokat a változásokat bejelenteni, amelyek befolyásolják a felhasználó aktuális munkafolyamatát: kosár frissítése, betöltési állapot, űrlap-érvényesítési hiba, csevegési értesítés. Háttérváltozások (idő a sávon, valutaárfolyam) nem igényelnek bejelentést — a felhasználó szükség esetén maga ellenőrzi azokat.
A VoiceOver tesztelése fizikai eszközzel, bekapcsolt screen readerrel vagy iOS szimulátorral az Accessibility Inspector opcióval történik. Fontos a teljes használati forgatókönyvek ellenőrzése: vizuális kontroll nélkül regisztrálni, rendelést leadni, terméket kereséssel megtalálni. Ha az útvonal vizuális visszajelzés nélkül is járható — a VoiceOver megfelelően van konfigurálva.
Gyakran ismételt kérdések
Beállítások → Akadálymentesítés → VoiceOver. Kapcsolja be a kapcsolót. A gyors bekapcsoláshoz használja az oldalsó gomb (iPhone X és újabb) vagy a Home gomb háromszori megnyomását. A Siri is bekapcsolhatja a VoiceOver-t a „Kapcsold be a VoiceOver-t" paranccsal.
A VoiceOver — az Apple képernyőolvasója iOS-hez, a TalkBack — a Google képernyőolvasója Androidhoz. A működési elv ugyanaz: az érintés hangosít, a dupla érintés aktivál. A különbség a gesztusokban, a rotor beállításaiban és az ökoszisztéma-integrációkban van: a VoiceOver mélyebben integrálódik az iClouddal és az Apple Pay-jel.
Használja az UIAccessibility API-t: állítson be accessibilityLabel-t minden elemhez, accessibilityTraits-t az elem típusához és accessibilityHint-t a segítségekhez. SwiftUI-ben alkalmazza a .accessibilityLabel() és .accessibilityAddTraits() módosítókat. Tesztelje az alkalmazást bekapcsolt VoiceOver-rel.
A rotor — egy navigációs mód, amely két ujjal forgatva váltható. Meghatározza, hogyan mozogjon az elemek között: címsorok, karakterek, szavak, hivatkozások vagy belépési pontok szerint. A fejlesztők saját módokat adhatnak hozzá az UIAccessibilityCustomRotor segítségével.
Egyedi UIView-ek esetén be kell állítani az isAccessibilityElement = true értéket, és meg kell adni az accessibilityLabel-t. Ha az elem több gyermek nézetből áll, használja az accessibilityElements-t az olvasási sorrend meghatározásához, vagy egyesítse őket egy konténerben.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is