VoiceOver — е вграденият екранен четец (screen reader) на Apple, който озвучава всеки елемент от интерфейса и позволява управление на устройството с жестове. Технологията е вградена в iOS, iPadOS и macOS на системно ниво и не изисква инсталиране на допълнителен софтуер. Според Apple Accessibility (2025), VoiceOver поддържа над 40 езика и се използва от милиони слепи и слабовиждащи потребители по целия свят.
Основни неща
VoiceOver — е екранен четец (screen reader), вграден в операционните системи на Apple. Предназначен е за слепи и слабовиждащи потребители и осигурява пълноценно взаимодействие с устройството без визуален контакт. VoiceOver озвучава всички елементи на интерфейса: бутони, връзки, текст, изображения, известия и системни елементи.
Технологията беше представена за първи път през 2005 г. за macOS, а на iOS се появи заедно с iPhone 3GS през 2009 г. Оттогава VoiceOver стана неразделна част от екосистемата на Apple и един от основните аргументи в полза на достъпността на платформата. VoiceOver е вграден на системно ниво — това означава, че работи във всяко приложение без допълнителна интеграция от страна на разработчика, въпреки че качеството на озвучаване зависи пряко от това, колко добре приложението използва API за достъпност на iOS.
VoiceOver поддържа над 40 езика с естествен синтез на реч и се адаптира към регионалните настройки на гласа. На iOS VoiceOver използва гласовите двигатели на Siri за български и редица други езици, което осигурява максимално естествено звучене и правилна интонация в зависимост от пунктуацията и контекста.
VoiceOver прихваща събитията на докосване и ги интерпретира по различен начин от стандартния вход на iOS. Когато потребителят докосне екрана, VoiceOver не активира елемента под пръста, а първо го озвучава. Едва след двойно докосване елементът се активира. Това е ключовата разлика, която позволява на слепите потребители да изследват интерфейса без риск от случайно натискане.
VoiceOver чете елементите на интерфейса в логически ред: отляво надясно, отгоре надолу. Редът на четене се наследява от йерархията на изгледите на iOS, но разработчикът може да го промени чрез свойството accessibilityElements за сложни оформления. Потребителят може да се придвижва между елементите чрез плъзгане надясно (следващ) и наляво (предишен), както и чрез докосване на конкретен елемент за неговото озвучаване.
При всяко придвижване VoiceOver произнася типа на елемента (бутон, връзка, заглавие), неговото име (accessibilityLabel), състояние (избран, изключен) и подсказка (accessibilityHint). Ако елементът съдържа стойност — например плъзгач за сила на звука — VoiceOver озвучава и нея. Характеристики на достъпност (UIAccessibilityTraits) допълнително информират потребителя за поведението на елемента: дали е бутон, превключвател, търсене или клавиш от клавиатурата.
Роторът — е виртуален копче за настройка, което превключва режима на навигация на VoiceOver. Потребителят върти ротора с два пръста (като копче за сила на звука) и избира режим: думи, символи, заглавия, връзки, точки на влизане, редове на таблица и други. Режим на заглавия позволява бързо превключване между H1-H6 на уеб страници и в приложения, а режим на символи — произнасяне на текст буква по буква, което е полезно при попълване на формуляри или въвеждане на кодове за потвърждение.
Разработчикът може да добавя собствени режими към ротора чрез API UIAccessibilityCustomRotor. Например в приложение за бележки може да се добави ротор „Любими бележки" или „Последни промени". Персонализирани ротори значително ускоряват навигацията в специфични приложения и се считат за най-добра практика за достъпност на iOS.
VoiceOver използва собствен набор от жестове, които не съвпадат със стандартните жестове на iOS. Повечето жестове се изпълняват с три пръста вместо с един — това предотвратява конфликти с обичайното управление и позволява на VoiceOver да работи едновременно със стандартния вход.
| Действие | Жест | Резултат |
|---|---|---|
| Озвучи елемент | Докосване с 1 пръст | Произнася името на елемента |
| Активирай | Двойно докосване | Натискане на бутон или връзка |
| Следващ елемент | Плъзгане надясно | Преминаване към следващ |
| Предишен елемент | Плъзгане наляво | Връщане към предишен |
| Превъртане | 3 пръста плъзгане | Превъртане на списък или страница |
| Ротор | 2 пръста въртене | Смяна на режима на навигация |
Жестът двойно докосване е основният начин за активиране на елементи в VoiceOver. Ако елементът изисква специално действие (например влачене), VoiceOver използва последователността „докосване — двойно докосване и задържане" за влизане в режим на преместване. Това позволява изпълнение на сложни жестове като drag-and-drop без да се гледа екрана. VoiceOver също поддържа жест „двойно докосване с два пръста" за отмяна на действие и „тройно докосване" за включване/изключване на екранната завеса (Screen Curtain).
Разработчикът на iOS приложение може значително да подобри взаимодействието с VoiceOver чрез API UIAccessibility. Основните настройки за достъпност се добавят в Interface Builder (Identity Inspector → Accessibility), но за сложни интерфейси е необходимо програмно конфигуриране в кода.
Свойството accessibilityLabel задава текста, който VoiceOver произнася за елемента. Ако етикетът не е зададен, VoiceOver използва текста на бутона или placeholder на текстовото поле. За елементи без текст (икони, персонализирани изгледи) етикетът е задължителен. Свойството accessibilityTraits определя типа на елемента: бутон, заглавие, превключвател, търсене, клавиш от клавиатурата, променяща се стойност, връзка и други.
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Потребителски профил"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Отваря екрана настройки на профила"
Флагът isAccessibilityElement включва поддръжка на VoiceOver за персонализирани изгледи — по подразбиране е true само за стандартни елементи (UIButton, UILabel, UITextField). Параметърът accessibilityHint добавя подсказка: VoiceOver я произнася след пауза, ако потребителят спре на елемента. Hint трябва да описва резултата от действието, а не инструкцията: „Отваря екрана с настройки" вместо „Натиснете, за да отворите".
За сложни екрани, където логическата група от елементи не съответства на визуалния ред, се използва accessibilityElements — масив, който задава реда на четене. Например картата на продукт съдържа изображение, име, цена и бутон „В кошницата". Ако тези елементи са хаотично разположени в йерархията на изгледите, accessibilityElements установява правилния ред за VoiceOver.
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()
productCard.accessibilityElements = [
productImage, productName, productPrice, addToCartButton
]
За обединяване на няколко елемента в един достъпен елемент се използва UIAccessibilityContainer или accessibilityFrame за презаписване на зоната на докосване. Това е полезно, когато клетка от таблица съдържа няколко UI компонента, но логически представлява един елемент — VoiceOver трябва да озвучи цялата клетка като цяло, а не да обхожда съдържанието ѝ поотделно.
Правилната настройка на достъпност за VoiceOver изисква внимание към няколко аспекта: семантично маркиране, динамични актуализации, обработка на персонализирани елементи и тестване с реален screen reader.
В SwiftUI достъпността се конфигурира чрез модификаторите .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() и .accessibilityAddTraits(). SwiftUI автоматично наследява достъпност от стандартните елементи, но за персонализирани компоненти е необходимо изрично конфигуриране. Например персонализиран плъзгач трябва да информира VoiceOver за своята стойност и формат на промяна.
Slider(value: $volume, in: 0...100)
.accessibilityLabel("Сила на звука")
.accessibilityValue(
Text("\(Int(volume)) процента")
)
.accessibilityAddTraits(.adjustsAudioForAccessibility)
.accessibilityAdjustableAction { direction in
switch direction {
case .increment: volume = min(volume + 5, 100)
case .decrement: volume = max(volume - 5, 0)
}
}
Модификаторът accessibilityAdjustableAction добавя възможност за промяна на стойността чрез жестове на VoiceOver: плъзгане нагоре — увеличаване, плъзгане надолу — намаляване. Без този модификатор плъзгачът остава недостъпен за управление чрез screen reader. Подобна настройка е необходима за персонализирани stepper-и, picker-и и други елементи, които променят своята стойност.
Когато съдържанието на екрана се променя динамично (появи се известие, актуализира се статусът на зареждане, промени се цената), VoiceOver трябва да получи известие чрез UIAccessibility.post. Без това извикване screen reader-ът няма да научи за промените и потребителят ще пропусне важна информация. За SwiftUI се използва модификаторът .accessibilityAnnouncement().
UIAccessibility.post(
notification: .announcement,
argument: "Цената е намалена с 20 процента"
)
// SwiftUI
Text("Цената е актуализирана")
.accessibilityAnnouncement(Text("20% отстъпка"))
Известията на VoiceOver трябва да се използват разумно: прекомерните съобщения дразнят потребителя, а липсата им прави приложението недостъпно. Оптималната стратегия — да се съобщават само промените, които влияят на текущия работен процес на потребителя: актуализация на кошницата, статус на зареждане, грешка при валидиране на формуляр, известие от чат. Фонови промени (час на лентата, валутен курс) не изискват съобщаване — потребителят сам ще ги провери при необходимост.
Тестването на VoiceOver се извършва чрез физическо устройство с включен screen reader или iOS симулатор с опция Accessibility Inspector. Важно е да се тестват сценарии за пълно използване: без визуален контрол да преминете регистрация, да направите поръчка, да намерите продукт чрез търсене. Ако маршрутът е проходим без визуална обратна връзка — VoiceOver е конфигуриран правилно.
Често задавани въпроси
Настройки → Достъпност → VoiceOver. Включете превключвателя. За бързо включване се използва тройно натискане на страничния бутон (на iPhone X и по-нови) или бутона Home. Siri също може да включи VoiceOver с команда „Включи VoiceOver".
VoiceOver — екранният четец на Apple за iOS, TalkBack — екранният четец на Google за Android. Принципът на работа е един и същ: докосването озвучава, двойното докосване активира. Разликата е в жестовете, настройките на ротора и екосистемните интеграции: VoiceOver е по-дълбоко интегриран с iCloud и Apple Pay.
Използвайте API UIAccessibility: задайте accessibilityLabel за всички елементи, accessibilityTraits за типа на елемента и accessibilityHint за подсказки. В SwiftUI прилагайте модификаторите .accessibilityLabel() и .accessibilityAddTraits(). Тествайте приложението с включен VoiceOver.
Роторът — режим на навигация, превключван с въртене на два пръста. Той определя как да се придвижвате между елементите: по заглавия, символи, думи, връзки или точки на влизане. Разработчиците могат да добавят свои режими чрез UIAccessibilityCustomRotor.
За персонализирани UIView е необходимо да зададете isAccessibilityElement = true и да посочите accessibilityLabel. Ако елементът се състои от няколко дъщерни изгледа, използвайте accessibilityElements за определяне на реда на четене или ги обединете в контейнер.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също