VoiceOver — bu Apple-ning o'rnatilgan ekran o'quvchisi (screen reader) bo'lib, u interfeysning har bir elementini ovozli talaffuz qiladi va qurilmani jestlar bilan boshqarish imkonini beradi. Texnologiya iOS, iPadOS va macOS-ga tizim darajasida o'rnatilgan bo'lib, qo'shimcha dasturiy ta'minot o'rnatishni talab qilmaydi. Apple Accessibility (2025) ma'lumotlariga ko'ra, VoiceOver 40 dan ortiq tilni qo'llab-quvvatlaydi va butun dunyo bo'ylab millionlab ko'zi ojiz va zaif ko'ruvchi foydalanuvchilar tomonidan qo'llaniladi.
Asosiy ma'lumotlar
VoiceOver — bu Apple operatsion tizimlariga o'rnatilgan ekran o'quvchisi (screen reader). U ko'zi ojiz va zaif ko'ruvchi foydalanuvchilar uchun mo'ljallangan bo'lib, vizual aloqasiz qurilma bilan to'liq o'zaro aloqani ta'minlaydi. VoiceOver interfeysning barcha elementlarini ovozli talaffuz qiladi: tugmalar, havolalar, matn, rasmlar, bildirishnomalar va tizim elementlari.
Texnologiya birinchi marta 2005-yilda macOS uchun taqdim etilgan va iOS-da 2009-yilda iPhone 3GS bilan paydo bo'lgan. O'shandan beri VoiceOver Apple ekotizimining ajralmas qismiga va platforma imkoniyatining asosiy dalillaridan biriga aylandi. VoiceOver tizim darajasida o'rnatilgan — ya'ni dasturchi tomonidan qo'shimcha integratsiyasiz har qanday ilovada ishlaydi, garchi ovozli talaffuz sifati to'g'ridan-to'g'ri ilovaning iOS imkoniyat API-sidan qanchalik yaxshi foydalanishiga bog'liq.
VoiceOver tabiiy nutq sintezi bilan 40 dan ortiq tilni qo'llab-quvvatlaydi va mintaqaviy ovoz sozlamalariga moslashadi. iOS-da VoiceOver o'zbek va boshqa tillar uchun Siri ovoz mexanizmlaridan foydalanadi, bu esa tinish belgilari va kontekstga qarab maksimal darajada tabiiy ovoz va to'g'ri intonatsiyani ta'minlaydi.
VoiceOver teginish hodisalarini ushlaydi va ularni standart iOS kiritishidan farqli ravishda talqin qiladi. Foydalanuvchi ekranga teginsa, VoiceOver barmoq ostidagi elementni faollashtirmaydi, avval uni ovozli talaffuz qiladi. Faqat ikki marta teginishdan so'ng element faollashadi. Bu ko'zi ojiz foydalanuvchilarga tasodifiy bosish xavfisiz interfeysni o'rganish imkonini beradigan asosiy farqdir.
VoiceOver interfeys elementlarini mantiqiy tartibda o'qiydi: chapdan o'ngga, yuqoridan pastga. O'qish tartibi iOS ko'rinish ierarxiyasidan meros bo'lib o'tadi, ammo dasturchi murakkab layoutlar uchun accessibilityElements xususiyati orqali uni o'zgartirishi mumkin. Foydalanuvchi elementlar orasida o'ngga (keyingi) va chapga (oldingi) siljitish, shuningdek ma'lum bir elementga teginish orqali uni ovozli talaffuz qilishi mumkin.
Har bir harakatda VoiceOver element turini (tugma, havola, sarlavha), uning nomini (accessibilityLabel), holatini (tanlangan, o'chirilgan) va maslahatni (accessibilityHint) aytadi. Agar element qiymatni o'z ichiga olsa — masalan, ovoz balandligi slayderi — VoiceOver uni ham ovozli talaffuz qiladi. Accessibility Traits (UIAccessibilityTraits) qo'shimcha ravishda foydalanuvchiga elementning xatti-harakati haqida ma'lumot beradi: tugma, kalit, qidiruv yoki klaviatura tugmasi ekanligini bildiradi.
Rotor — bu VoiceOver navigatsiya rejimini o'zgartiruvchi virtual sozlash dastasidir. Foydalanuvchi rotorni ikki barmoq bilan (ovoz balandligi dastasi kabi) aylantiradi va rejimni tanlaydi: so'zlar, belgilar, sarlavhalar, havolalar, kirish nuqtalari, jadval qatorlari va boshqalar. Sarlavha rejimi veb-sahifalar va ilovalarda H1-H6 o'rtasida tez almashish imkonini beradi, belgi rejimi esa matnni harfma-harf talaffuz qiladi — bu formlarni to'ldirish yoki tasdiqlash kodlarini kiritishda foydalidir.
Dasturchi UIAccessibilityCustomRotor API orqali rotorga o'z rejimlarini qo'shishi mumkin. Masalan, eslatma ilovasida „Sevimli eslatmalar" yoki „So'nggi o'zgarishlar" rotori qo'shilishi mumkin. Maxsus rotorlar muayyan ilovalarda navigatsiyani sezilarli darajada tezlashtiradi va iOS-da imkoniyatning eng yaxshi amaliyoti hisoblanadi.
VoiceOver standart iOS jestlari bilan mos kelmaydigan o'z jestlar to'plamidan foydalanadi. Aksariyat jestlar bir barmoq o'rniga uch barmoq bilan bajariladi — bu oddiy boshqaruv bilan ziddiyatlarning oldini oladi va VoiceOver-ga standart kiritish bilan bir vaqtda ishlash imkonini beradi.
| Harakat | Jest | Natija |
|---|---|---|
| Elementni ovozli talaffuz qilish | 1 barmoq bilan teginish | Element nomini aytadi |
| Faollashtirish | Ikki marta teginish | Tugma yoki havolani bosish |
| Keyingi element | O'ngga siljitish | Keyingisiga o'tish |
| Oldingi element | Chapga siljitish | Oldingisiga qaytish |
| Siljitish | 3 barmoq siljitish | Ro'yxat yoki sahifani siljitish |
| Rotor | 2 barmoq aylantirish | Navigatsiya rejimini o'zgartirish |
Ikki marta teginish jesti VoiceOver-da elementlarni faollashtirishning asosiy usulidir. Agar element maxsus harakatni talab qilsa (masalan, tortish), VoiceOver ko'chirish rejimiga kirish uchun „teginish — ikki marta teginish va ushlab turish" ketma-ketligidan foydalanadi. Bu ekranga qaramasdan drag-and-drop kabi murakkab jestlarni bajarish imkonini beradi. VoiceOver shuningdek harakatni bekor qilish uchun „ikki barmoq bilan ikki marta teginish" va ekran pardasini (Screen Curtain) yoqish/o'chirish uchun „uch marta teginish" jestini qo'llab-quvvatlaydi.
IOS ilovasi dasturchisi UIAccessibility API orqali VoiceOver bilan o'zaro aloqani sezilarli darajada yaxshilashi mumkin. Asosiy imkoniyat sozlamalari Interface Builder-da (Identity Inspector → Accessibility) qo'shiladi, ammo murakkab interfeyslar uchun kodda dasturiy sozlash talab qilinadi.
accessibilityLabel xususiyati VoiceOver element uchun talaffuz qiladigan matnni belgilaydi. Agar yorliq o'rnatilmagan bo'lsa, VoiceOver tugma matni yoki matn maydoni placeholderidan foydalanadi. Matsiz elementlar (belgilar, maxsus ko'rinishlar) uchun yorliq majburiydir. accessibilityTraits xususiyati element turini aniqlaydi: tugma, sarlavha, kalit, qidiruv, klaviatura tugmasi, o'zgaruvchi qiymat, havola va boshqalar.
let profileButton = UIButton(type: .custom)
profileButton.setImage(UIImage(named: "avatar"), for: .normal)
profileButton.isAccessibilityElement = true
profileButton.accessibilityLabel = "Foydalanuvchi profili"
profileButton.accessibilityTraits = .button
profileButton.accessibilityHint = "Profil sozlamalari ekranini ochadi"
isAccessibilityElement bayrog'i maxsus ko'rinishlar uchun VoiceOver qo'llab-quvvatlashini faollashtiradi — standart bo'yicha faqat asosiy elementlar (UIButton, UILabel, UITextField) uchun true hisoblanadi. accessibilityHint parametri maslahat qo'shadi: foydalanuvchi elementda to'xtab qolsa, VoiceOver uni pauzadan so'ng aytadi. Hint harakat natijasini tasvirlashi kerak, ko'rsatmani emas: „Sozlamalar ekranini ochadi" „Ochish uchun bosing" o'rniga.
Elementlarning mantiqiy guruhi vizual tartibga mos kelmaydigan murakkab ekranlar uchun accessibilityElements ishlatiladi — o'qish tartibini belgilaydigan massiv. Masalan, mahsulot kartasida rasm, nom, narx va „Savatga" tugmasi mavjud. Agar bu elementlar ko'rinish ierarxiyasida tartibsiz joylashgan bo'lsa, accessibilityElements VoiceOver uchun to'g'ri tartibni o'rnatadi.
let productCard = UIView()
let productImage = UIImageView()
let productName = UILabel()
let productPrice = UILabel()
let addToCartButton = UIButton()
productCard.accessibilityElements = [
productImage, productName, productPrice, addToCartButton
]
Bir nechta elementlarni bitta imkoniyatli elementda birlashtirish uchun UIAccessibilityContainer yoki teginish maydonini bekor qilish uchun accessibilityFrame ishlatiladi. Bu jadval katagi bir nechta UI komponentlarini o'z ichiga olgan, ammo mantiqan bitta elementni ifodalaganda foydalidir — VoiceOver butun katakni bir butun sifatida ovozli talaffuz qilishi kerak, uning mazmunini alohida ko'rib chiqmasligi kerak.
VoiceOver uchun to'g'ri imkoniyat sozlamalari bir necha jihatga e'tibor talab qiladi: semantik belgilash, dinamik yangilanishlar, maxsus elementlarni qayta ishlash va real screen reader bilan sinov.
SwiftUI-da imkoniyat .accessibilityLabel(), .accessibilityValue(), .accessibilityHint() va .accessibilityAddTraits() modifikatorlari orqali sozlanadi. SwiftUI avtomatik ravishda standart elementlardan imkoniyatni meros qilib oladi, ammo maxsus komponentlar uchun aniq sozlash talab qilinadi. Masalan, maxsus slayder VoiceOver-ga o'z qiymati va o'zgarish formati haqida xabar berishi kerak.
Slider(value: $volume, in: 0...100)
.accessibilityLabel("Ovoz balandligi")
.accessibilityValue(
Text("\(Int(volume)) foiz")
)
.accessibilityAddTraits(.adjustsAudioForAccessibility)
.accessibilityAdjustableAction { direction in
switch direction {
case .increment: volume = min(volume + 5, 100)
case .decrement: volume = max(volume - 5, 0)
}
}
accessibilityAdjustableAction modifikatori VoiceOver jestlari bilan qiymatni o'zgartirish imkoniyatini qo'shadi: yuqoriga siljitish — oshirish, pastga siljitish — kamaytirish. Bu modifikatorsiz slayder screen reader orqali boshqarish uchun imkoniyatsiz qoladi. Shunga o'xshash sozlash maxsus stepperlar, pickerlar va qiymatini o'zgartiruvchi boshqa elementlar uchun talab qilinadi.
Ekrandagi tarkib dinamik ravishda o'zgarganda (bildirishnoma paydo bo'ldi, yuklash holati yangilandi, narx o'zgardi), VoiceOver UIAccessibility.post orqali bildirishnoma olishi kerak. Bu chaqiruvsiz screen reader o'zgarishlardan xabar topmaydi va foydalanuvchi muhim ma'lumotni o'tkazib yuboradi. SwiftUI uchun .accessibilityAnnouncement() modifikatori ishlatiladi.
UIAccessibility.post(
notification: .announcement,
argument: "Narx 20 foizga pasaytirildi"
)
// SwiftUI
Text("Narx yangilandi")
.accessibilityAnnouncement(Text("20% chegirma"))
VoiceOver bildirishnomalaridan oqilona foydalanish kerak: haddan tashqari e'lonlar foydalanuvchini bezovta qiladi, ularning yo'qligi esa ilovani imkoniyatsiz qiladi. Optimal strategiya — faqat foydalanuvchining joriy ish oqimiga ta'sir qiluvchi o'zgarishlarni e'lon qilish: savat yangilanishi, yuklash holati, formani tekshirish xatosi, chat bildirishnomasi. Fon o'zgarishlari (paneldagi vaqt, valyuta kursi) e'lon qilishni talab qilmaydi — foydalanuvchi kerak bo'lganda o'zi tekshiradi.
VoiceOver sinovi screen reader yoqilgan jismoniy qurilma yoki Accessibility Inspector opsiyasi bilan iOS simulyatori orqali amalga oshiriladi. To'liq foydalanish stsenariylarini tekshirish muhim: vizual nazoratsiz ro'yxatdan o'tish, buyurtma berish, qidiruv orqali mahsulotni topish. Agar marshrut vizual teskari aloqasiz o'tilsa — VoiceOver to'g'ri sozlangan.
Tez-tez so'raladigan savollar
Sozlamalar → Universal kirish → VoiceOver. Kalitni yoqing. Tez yoqish uchun yon tugmani (iPhone X va undan yangilarida) yoki Home tugmasini uch marta bosish ishlatiladi. Siri ham „VoiceOver-ni yoq" buyrug'i bilan VoiceOver-ni yoqishi mumkin.
VoiceOver — Apple-ning iOS uchun ekran o'quvchisi, TalkBack — Google-ning Android uchun ekran o'quvchisi. Ishlash printsipi bir xil: teginish ovozli talaffuz qiladi, ikki marta teginish faollashtiradi. Farq jestlar, rotor sozlamalari va ekotizim integratsiyalarida: VoiceOver iCloud va Apple Pay bilan chuqurroq integratsiyalangan.
UIAccessibility API-dan foydalaning: barcha elementlar uchun accessibilityLabel, element turi uchun accessibilityTraits va maslahatlar uchun accessibilityHint o'rnating. SwiftUI-da .accessibilityLabel() va .accessibilityAddTraits() modifikatorlarini qo'llang. Ilovani VoiceOver yoqilgan holda sinab ko'ring.
Rotor — ikki barmoq aylantirish bilan o'zgartiriladigan navigatsiya rejimi. Elementlar orasida qanday harakat qilishni belgilaydi: sarlavhalar, belgilar, so'zlar, havolalar yoki kirish nuqtalari bo'yicha. Dasturchilar UIAccessibilityCustomRotor orqali o'z rejimlarini qo'shishlari mumkin.
Maxsus UIView-lar uchun isAccessibilityElement = true o'rnatish va accessibilityLabel berish kerak. Agar element bir nechta bolali ko'rinishlardan iborat bo'lsa, o'qish tartibini belgilash uchun accessibilityElements ishlating yoki ularni konteynerda birlashtiring.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.