VoiceOver: co to je, ovládací gesta a možnosti na iOS

Autor: IT Sectr Publikováno: 2026-05-15 Doba čtení: 8 min

VoiceOver — je vestavěný hlasový výstup (screen reader) od Apple, který vyslovuje každý prvek rozhraní a umožňuje ovládat zařízení pomocí gest. Tato technologie je zabudována do iOS, iPadOS a macOS na systémové úrovni a nevyžaduje instalaci dalšího softwaru. Podle Apple Accessibility (2025) podporuje VoiceOver více než 40 jazyků a používají ho miliony nevidomých a slabozrakých uživatelů po celém světě.

Hlavní body

  • VoiceOver — vestavěný screen reader na iOS, iPadOS a macOS, ovládaný gesty a hlasem
  • VoiceOver rotor přepíná režimy navigace: slova, znaky, nadpisy, odkazy
  • Gesta zahrnují dotek (vyslovení), přejetí (přechod) a dvojitý dotek (aktivace)
  • Vývojáři nastavují přístupnost přes UIAccessibility a Accessibility Label
  • VoiceOver se integruje s dynamickým textem a Braillovými displeji

Co je VoiceOver?

VoiceOver — je hlasový výstup (screen reader) vestavěný do operačních systémů Apple. Je určen pro nevidomé a slabozraké uživatele a poskytuje plnohodnotnou interakci se zařízením bez vizuálního kontaktu. VoiceOver vyslovuje všechny prvky rozhraní: tlačítka, odkazy, text, obrázky, oznámení a systémové prvky.

Tato technologie byla poprvé představena v roce 2005 pro macOS a na iOS se objevila s iPhone 3GS v roce 2009. Od té doby se VoiceOver stal nedílnou součástí ekosystému Apple a jedním z hlavních argumentů pro přístupnost platformy. VoiceOver je zabudován na systémové úrovni — to znamená, že funguje v jakékoli aplikaci bez dodatečné integrace ze strany vývojáře, i když kvalita hlasového výstupu přímo závisí na tom, jak dobře aplikace využívá API přístupnosti iOS.

VoiceOver podporuje více než 40 jazyků s přirozenou syntézou řeči a přizpůsobuje se regionálním nastavením hlasu. Na iOS VoiceOver využívá hlasové engine Siri pro češtinu a další jazyky, což zajišťuje co nejpřirozenější zvuk a správnou intonaci v závislosti na interpunkci a kontextu.

Jak VoiceOver funguje?

VoiceOver zachycuje události dotyku a interpretuje je jinak než standardní vstup iOS. Když uživatel dotkne obrazovky, VoiceOver neaktivuje prvek pod prstem, ale nejprve jej vysloví. Teprve po dvojitém dotyku se prvek aktivuje. To je klíčový rozdíl, který umožňuje nevidomým uživatelům prozkoumávat rozhraní bez rizika náhodného stisknutí.

Pořadí čtení a navigace

VoiceOver čte prvky rozhraní v logickém pořadí: zleva doprava, shora dolů. Pořadí čtení se dědí z hierarchie zobrazení iOS, ale vývojář jej může změnit pomocí vlastnosti accessibilityElements pro složitá rozvržení. Uživatel se může pohybovat mezi prvky přejetím doprava (další) a doleva (předchozí) a také dotykem konkrétního prvku pro jeho vyslovení.

Při každém přesunu VoiceOver vysloví typ prvku (tlačítko, odkaz, nadpis), jeho název (accessibilityLabel), stav (vybráno, vypnuto) a nápovědu (accessibilityHint). Pokud prvek obsahuje hodnotu — například posuvník hlasitosti — VoiceOver vysloví i ji. Vlastnosti přístupnosti (UIAccessibilityTraits) dále informují uživatele o chování prvku: zda se jedná o tlačítko, přepínač, vyhledávání nebo klávesu klávesnice.

Rotor VoiceOver

Rotor — je virtuální ovládací knoflík, který přepíná režim navigace VoiceOver. Uživatel otáčí rotorem dvěma prsty (jako knoflíkem hlasitosti) a vybírá režim: slova, znaky, nadpisy, odkazy, vstupní body, řádky tabulky a další. Režim nadpisů umožňuje rychlé přepínání mezi H1-H6 na webových stránkách a v aplikacích, a režim znaků — vyslovování textu písmeno po písmeni, což je užitečné při vyplňování formulářů nebo zadávání potvrzovacích kódů.

Vývojář může přidávat vlastní režimy do rotoru pomocí API UIAccessibilityCustomRotor. Například v aplikaci na poznámky lze přidat rotor „Oblíbené poznámky" nebo „Poslední změny". Vlastní rotory výrazně urychlují navigaci ve specifických aplikacích a jsou považovány za nejlepší praxi přístupnosti na iOS.

Ovládací gesta VoiceOver

VoiceOver používá vlastní sadu gest, která se neshodují se standardními gesty iOS. Většina gest se provádí třemi prsty místo jednoho — to zabraňuje konfliktům s běžným ovládáním a umožňuje VoiceOver pracovat současně se standardním vstupem.

AkceGestoVýsledek
Vyslovit prvekDotek 1 prstemVysloví název prvku
AktivovatDvojitý dotekStisknutí tlačítka nebo odkazu
Další prvekPřejetí dopravaPřechod na další
Předchozí prvekPřejetí dolevaNávrat k předchozímu
Posouvání3 prsty přejetíPosouvání seznamu nebo stránky
Rotor2 prsty otáčeníZměna režimu navigace

Gesto dvojitý dotek je hlavním způsobem aktivace prvků ve VoiceOver. Pokud prvek vyžaduje speciální akci (například přetažení), VoiceOver použije sekvenci „dotek — dvojitý dotek a podržení" pro vstup do režimu přesouvání. To umožňuje provádět složitá gesta, jako je drag-and-drop, bez pohledu na obrazovku. VoiceOver také podporuje gesto „dvojitý dotek dvěma prsty" pro zrušení akce a „trojitý dotek" pro zapnutí/vypnutí závěsu obrazovky (Screen Curtain).

VoiceOver v mobilním vývoji

Vývojář iOS aplikace může výrazně zlepšit interakci s VoiceOver prostřednictvím API UIAccessibility. Základní nastavení přístupnosti se přidávají v Interface Builder (Identity Inspector → Accessibility), ale pro složitá rozhraní je vyžadováno programové nastavení v kódu.

Accessibility Label a Traits

Vlastnost accessibilityLabel nastavuje text, který VoiceOver vysloví pro prvek. Pokud štítek není nastaven, VoiceOver použije text tlačítka nebo placeholder textového pole. Pro prvky bez textu (ikony, vlastní zobrazení) je štítek povinný. Vlastnost accessibilityTraits určuje typ prvku: tlačítko, nadpis, přepínač, vyhledávání, klávesa klávesnice, měnící se hodnota, odkaz a další.

swift
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Uživatelský profil"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Otevírá obrazovku nastavení profilu"

Příznak isAccessibilityElement zapíná podporu VoiceOver pro vlastní zobrazení — ve výchozím nastavení je true pouze pro standardní prvky (UIButton, UILabel, UITextField). Parametr accessibilityHint přidává nápovědu: VoiceOver ji vysloví po pauze, pokud uživatel zastaví na prvku. Hint by měl popisovat výsledek akce, nikoli instrukci: „Otevře obrazovku nastavení" místo „Stiskněte pro otevření".

Seskupování a pořadí prvků

Pro složité obrazovky, kde logická skupina prvků neodpovídá vizuálnímu pořadí, se používá accessibilityElements — pole, které nastavuje pořadí čtení. Například karta produktu obsahuje obrázek, název, cenu a tlačítko „Do košíku". Pokud jsou tyto prvky chaoticky rozmístěny v hierarchii zobrazení, accessibilityElements nastaví správné pořadí pro VoiceOver.

swift
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()

productCard.accessibilityElements = [
    productImage, productName, productPrice, addToCartButton
]

Pro sloučení více prvků do jednoho přístupného prvku se používá UIAccessibilityContainer nebo accessibilityFrame pro přepsání oblasti dotyku. To je užitečné, když buňka tabulky obsahuje několik komponent UI, ale logicky představuje jeden prvek — VoiceOver by měl vyslovit celou buňku jako celek, ne procházet její obsah samostatně.

Nastavení přístupnosti pro VoiceOver

Správné nastavení přístupnosti pro VoiceOver vyžaduje pozornost k několika aspektům: sémantické značení, dynamické aktualizace, zpracování vlastních prvků a testování se skutečným screen readerem.

Sémantické značení ve SwiftUI

Ve SwiftUI se přístupnost nastavuje pomocí modifikátorů .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() a .accessibilityAddTraits(). SwiftUI automaticky dědí přístupnost ze standardních prvků, ale pro vlastní komponenty je vyžadováno explicitní nastavení. Například vlastní posuvník musí informovat VoiceOver o své hodnotě a formátu změny.

swift
Slider(value: $volume, in: 0...100)
    .accessibilityLabel("Hlasitost zvuku")
    .accessibilityValue(
        Text("\(Int(volume)) procent")
    )
    .accessibilityAddTraits(.adjustsAudioForAccessibility)
    .accessibilityAdjustableAction { direction in
        switch direction {
        case .increment: volume = min(volume + 5, 100)
        case .decrement: volume = max(volume - 5, 0)
        }
    }

Modifikátor accessibilityAdjustableAction přidává možnost změny hodnoty gesty VoiceOver: přejetí nahoru — zvýšení, přejetí dolů — snížení. Bez tohoto modifikátoru zůstane posuvník nepřístupný pro ovládání přes screen reader. Podobné nastavení je vyžadováno pro vlastní steppery, pickery a další prvky měnící svou hodnotu.

Dynamické aktualizace a oznámení

Když se obsah na obrazovce dynamicky mění (objevilo se oznámení, aktualizoval se stav načítání, změnila se cena), VoiceOver by měl obdržet oznámení prostřednictvím UIAccessibility.post. Bez tohoto volání se screen reader nedozví o změnách a uživatel zmešká důležité informace. Pro SwiftUI se používá modifikátor .accessibilityAnnouncement().

swift
UIAccessibility.post(
    notification: .announcement,
    argument: "Cena snížena o 20 procent"
)

// SwiftUI
Text("Cena aktualizována")
    .accessibilityAnnouncement(Text("Sleva 20%"))

Oznámení VoiceOver by měla být používána s rozumem: nadměrná hlášení uživatele obtěžují, a jejich absence činí aplikaci nepřístupnou. Optimální strategie — oznamovat pouze změny, které ovlivňují aktuální pracovní tok uživatele: aktualizace košíku, stav načítání, chyba validace formuláře, oznámení chatu. Změny na pozadí (čas na liště, kurz měny) nevyžadují oznámení — uživatel je v případě potřeby zkontroluje sám.

Testování VoiceOver se provádí pomocí fyzického zařízení s zapnutým screen readerem nebo iOS simulátoru s možností Accessibility Inspector. Je důležité otestovat scénáře plného použití: bez vizuální kontroly projít registrací, objednat, najít produkt vyhledáváním. Pokud je cesta průchozí bez vizuální zpětné vazby — VoiceOver je nastaven správně.

Často kladené dotazy

Jak zapnout VoiceOver na iPhone?

Nastavení → Přístupnost → VoiceOver. Zapněte přepínač. Pro rychlé zapnutí se používá trojité stisknutí bočního tlačítka (na iPhone X a novějších) nebo tlačítka Domů. Siri také může zapnout VoiceOver příkazem „Zapni VoiceOver".

Čím se VoiceOver liší od TalkBack?

VoiceOver — Apple hlasový výstup pro iOS, TalkBack — Google hlasový výstup pro Android. Princip fungování je stejný: dotek vysloví, dvojitý dotek aktivuje. Rozdíl je v gestech, nastavení rotoru a ekosystémových integracích: VoiceOver je hlouběji integrován s iCloud a Apple Pay.

Jak nastavit VoiceOver pro svou aplikaci?

Použijte API UIAccessibility: nastavte accessibilityLabel pro všechny prvky, accessibilityTraits pro typ prvku a accessibilityHint pro nápovědy. Ve SwiftUI aplikujte modifikátory .accessibilityLabel() a .accessibilityAddTraits(). Testujte aplikaci se zapnutým VoiceOver.

Co je rotor ve VoiceOver?

Rotor — je režim navigace přepínaný otáčením dvou prstů. Určuje, jak se pohybovat mezi prvky: podle nadpisů, znaků, slov, odkazů nebo vstupních bodů. Vývojáři mohou přidat vlastní režimy prostřednictvím UIAccessibilityCustomRotor.

Proč VoiceOver nečte můj vlastní prvek?

Pro vlastní UIView je nutné nastavit isAccessibilityElement = true a zadat accessibilityLabel. Pokud se prvek skládá z několika podřízených zobrazení, použijte accessibilityElements pro určení pořadí čtení nebo je spojte do kontejneru.

Shrnutí

  • VoiceOver — vestavěný Apple screen reader pro iOS, iPadOS a macOS s hlasovým ovládáním gesty
  • Rotor přepíná režimy navigace: nadpisy, znaky, slova, odkazy a vlastní režimy
  • Gesta VoiceOver: dotek — vyslovení, dvojitý dotek — aktivace, přejetí — navigace
  • Vývoj přes API UIAccessibility: label, traits, hint, vlastní rotor a dynamická oznámení
  • SwiftUI poskytuje modifikátory .accessibilityLabel(), .accessibilityAddTraits() a .accessibilityAdjustableAction()
  • Dynamické aktualizace vyžadují volání UIAccessibility.post pro upozornění VoiceOver
  • Testování povinně na fyzickém zařízení se zapnutým VoiceOver bez vizuální kontroly

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také