VoiceOver: какво е, жестове за управление и възможности на iOS

Автор: IT Sectr Публикувано: 2026-05-15 Време за четене: 8 мин

VoiceOver — е вграденият екранен четец (screen reader) на Apple, който озвучава всеки елемент от интерфейса и позволява управление на устройството с жестове. Технологията е вградена в iOS, iPadOS и macOS на системно ниво и не изисква инсталиране на допълнителен софтуер. Според Apple Accessibility (2025), VoiceOver поддържа над 40 езика и се използва от милиони слепи и слабовиждащи потребители по целия свят.

Основни неща

  • VoiceOver — вграден screen reader на iOS, iPadOS и macOS, управляван с жестове и глас
  • Ротор на VoiceOver превключва режимите на навигация: думи, символи, заглавия, връзки
  • Жестове включват докосване (озвучаване), плъзгане (преход) и двойно докосване (активиране)
  • Разработчиците настройват достъпността чрез UIAccessibility и Accessibility Label
  • VoiceOver се интегрира с динамичен текст и брайлови дисплеи

Какво е VoiceOver?

VoiceOver — е екранен четец (screen reader), вграден в операционните системи на Apple. Предназначен е за слепи и слабовиждащи потребители и осигурява пълноценно взаимодействие с устройството без визуален контакт. VoiceOver озвучава всички елементи на интерфейса: бутони, връзки, текст, изображения, известия и системни елементи.

Технологията беше представена за първи път през 2005 г. за macOS, а на iOS се появи заедно с iPhone 3GS през 2009 г. Оттогава VoiceOver стана неразделна част от екосистемата на Apple и един от основните аргументи в полза на достъпността на платформата. VoiceOver е вграден на системно ниво — това означава, че работи във всяко приложение без допълнителна интеграция от страна на разработчика, въпреки че качеството на озвучаване зависи пряко от това, колко добре приложението използва API за достъпност на iOS.

VoiceOver поддържа над 40 езика с естествен синтез на реч и се адаптира към регионалните настройки на гласа. На iOS VoiceOver използва гласовите двигатели на Siri за български и редица други езици, което осигурява максимално естествено звучене и правилна интонация в зависимост от пунктуацията и контекста.

Как работи VoiceOver?

VoiceOver прихваща събитията на докосване и ги интерпретира по различен начин от стандартния вход на iOS. Когато потребителят докосне екрана, VoiceOver не активира елемента под пръста, а първо го озвучава. Едва след двойно докосване елементът се активира. Това е ключовата разлика, която позволява на слепите потребители да изследват интерфейса без риск от случайно натискане.

Ред на четене и навигация

VoiceOver чете елементите на интерфейса в логически ред: отляво надясно, отгоре надолу. Редът на четене се наследява от йерархията на изгледите на iOS, но разработчикът може да го промени чрез свойството accessibilityElements за сложни оформления. Потребителят може да се придвижва между елементите чрез плъзгане надясно (следващ) и наляво (предишен), както и чрез докосване на конкретен елемент за неговото озвучаване.

При всяко придвижване VoiceOver произнася типа на елемента (бутон, връзка, заглавие), неговото име (accessibilityLabel), състояние (избран, изключен) и подсказка (accessibilityHint). Ако елементът съдържа стойност — например плъзгач за сила на звука — VoiceOver озвучава и нея. Характеристики на достъпност (UIAccessibilityTraits) допълнително информират потребителя за поведението на елемента: дали е бутон, превключвател, търсене или клавиш от клавиатурата.

Ротор на VoiceOver

Роторът — е виртуален копче за настройка, което превключва режима на навигация на VoiceOver. Потребителят върти ротора с два пръста (като копче за сила на звука) и избира режим: думи, символи, заглавия, връзки, точки на влизане, редове на таблица и други. Режим на заглавия позволява бързо превключване между H1-H6 на уеб страници и в приложения, а режим на символи — произнасяне на текст буква по буква, което е полезно при попълване на формуляри или въвеждане на кодове за потвърждение.

Разработчикът може да добавя собствени режими към ротора чрез API UIAccessibilityCustomRotor. Например в приложение за бележки може да се добави ротор „Любими бележки" или „Последни промени". Персонализирани ротори значително ускоряват навигацията в специфични приложения и се считат за най-добра практика за достъпност на iOS.

Жестове за управление на VoiceOver

VoiceOver използва собствен набор от жестове, които не съвпадат със стандартните жестове на iOS. Повечето жестове се изпълняват с три пръста вместо с един — това предотвратява конфликти с обичайното управление и позволява на VoiceOver да работи едновременно със стандартния вход.

ДействиеЖестРезултат
Озвучи елементДокосване с 1 пръстПроизнася името на елемента
АктивирайДвойно докосванеНатискане на бутон или връзка
Следващ елементПлъзгане надясноПреминаване към следващ
Предишен елементПлъзгане налявоВръщане към предишен
Превъртане3 пръста плъзганеПревъртане на списък или страница
Ротор2 пръста въртенеСмяна на режима на навигация

Жестът двойно докосване е основният начин за активиране на елементи в VoiceOver. Ако елементът изисква специално действие (например влачене), VoiceOver използва последователността „докосване — двойно докосване и задържане" за влизане в режим на преместване. Това позволява изпълнение на сложни жестове като drag-and-drop без да се гледа екрана. VoiceOver също поддържа жест „двойно докосване с два пръста" за отмяна на действие и „тройно докосване" за включване/изключване на екранната завеса (Screen Curtain).

VoiceOver в мобилната разработка

Разработчикът на iOS приложение може значително да подобри взаимодействието с VoiceOver чрез API UIAccessibility. Основните настройки за достъпност се добавят в Interface Builder (Identity Inspector → Accessibility), но за сложни интерфейси е необходимо програмно конфигуриране в кода.

Accessibility Label и Traits

Свойството accessibilityLabel задава текста, който VoiceOver произнася за елемента. Ако етикетът не е зададен, VoiceOver използва текста на бутона или placeholder на текстовото поле. За елементи без текст (икони, персонализирани изгледи) етикетът е задължителен. Свойството accessibilityTraits определя типа на елемента: бутон, заглавие, превключвател, търсене, клавиш от клавиатурата, променяща се стойност, връзка и други.

swift
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.

swift
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

Правилната настройка на достъпност за VoiceOver изисква внимание към няколко аспекта: семантично маркиране, динамични актуализации, обработка на персонализирани елементи и тестване с реален screen reader.

Семантично маркиране в SwiftUI

В SwiftUI достъпността се конфигурира чрез модификаторите .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() и .accessibilityAddTraits(). SwiftUI автоматично наследява достъпност от стандартните елементи, но за персонализирани компоненти е необходимо изрично конфигуриране. Например персонализиран плъзгач трябва да информира VoiceOver за своята стойност и формат на промяна.

swift
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().

swift
UIAccessibility.post(
    notification: .announcement,
    argument: "Цената е намалена с 20 процента"
)

// SwiftUI
Text("Цената е актуализирана")
    .accessibilityAnnouncement(Text("20% отстъпка"))

Известията на VoiceOver трябва да се използват разумно: прекомерните съобщения дразнят потребителя, а липсата им прави приложението недостъпно. Оптималната стратегия — да се съобщават само промените, които влияят на текущия работен процес на потребителя: актуализация на кошницата, статус на зареждане, грешка при валидиране на формуляр, известие от чат. Фонови промени (час на лентата, валутен курс) не изискват съобщаване — потребителят сам ще ги провери при необходимост.

Тестването на VoiceOver се извършва чрез физическо устройство с включен screen reader или iOS симулатор с опция Accessibility Inspector. Важно е да се тестват сценарии за пълно използване: без визуален контрол да преминете регистрация, да направите поръчка, да намерите продукт чрез търсене. Ако маршрутът е проходим без визуална обратна връзка — VoiceOver е конфигуриран правилно.

Често задавани въпроси

Как да включа VoiceOver на iPhone?

Настройки → Достъпност → VoiceOver. Включете превключвателя. За бързо включване се използва тройно натискане на страничния бутон (на iPhone X и по-нови) или бутона Home. Siri също може да включи VoiceOver с команда „Включи VoiceOver".

По какво VoiceOver се различава от TalkBack?

VoiceOver — екранният четец на Apple за iOS, TalkBack — екранният четец на Google за Android. Принципът на работа е един и същ: докосването озвучава, двойното докосване активира. Разликата е в жестовете, настройките на ротора и екосистемните интеграции: VoiceOver е по-дълбоко интегриран с iCloud и Apple Pay.

Как да настроя VoiceOver за моето приложение?

Използвайте API UIAccessibility: задайте accessibilityLabel за всички елементи, accessibilityTraits за типа на елемента и accessibilityHint за подсказки. В SwiftUI прилагайте модификаторите .accessibilityLabel() и .accessibilityAddTraits(). Тествайте приложението с включен VoiceOver.

Какво е ротор в VoiceOver?

Роторът — режим на навигация, превключван с въртене на два пръста. Той определя как да се придвижвате между елементите: по заглавия, символи, думи, връзки или точки на влизане. Разработчиците могат да добавят свои режими чрез UIAccessibilityCustomRotor.

Защо VoiceOver не чете моя персонализиран елемент?

За персонализирани UIView е необходимо да зададете isAccessibilityElement = true и да посочите accessibilityLabel. Ако елементът се състои от няколко дъщерни изгледа, използвайте accessibilityElements за определяне на реда на четене или ги обединете в контейнер.

Резюме

  • VoiceOver — вграден Apple screen reader за iOS, iPadOS и macOS с гласово управление с жестове
  • Ротор превключва режимите на навигация: заглавия, символи, думи, връзки и персонализирани режими
  • Жестове VoiceOver: докосване — озвучаване, двойно докосване — активиране, плъзгане — навигация
  • Разработка чрез API UIAccessibility: label, traits, hint, персонализиран ротор и динамични известия
  • SwiftUI предоставя модификатори .accessibilityLabel(), .accessibilityAddTraits() и .accessibilityAdjustableAction()
  • Динамични актуализации изискват извикване на UIAccessibility.post за уведомяване на VoiceOver
  • Тестване задължително на реално устройство с включен VoiceOver без визуален контрол

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също