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 изговара и њу. Accessibility Traits (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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође