VoiceOver Apple का अंतर्निर्मित स्क्रीन रीडर है जो इंटरफ़ेस के हर तत्व को आवाज़ देता है और जेस्चर के माध्यम से डिवाइस को नियंत्रित करने की अनुमति देता है। यह तकनीक iOS, iPadOS और macOS में सिस्टम स्तर पर निर्मित है और इसे अतिरिक्त सॉफ़्टवेयर इंस्टॉलेशन की आवश्यकता नहीं है। Apple Accessibility (2025) के अनुसार, VoiceOver 40 से अधिक भाषाओं का समर्थन करता है और दुनिया भर में लाखों नेत्रहीन और कम दृष्टि वाले उपयोगकर्ताओं द्वारा उपयोग किया जाता है।
मुख्य बिंदु
VoiceOver एक स्क्रीन रीडर है जो Apple ऑपरेटिंग सिस्टम में निर्मित है। यह नेत्रहीन और कम दृष्टि वाले उपयोगकर्ताओं के लिए डिज़ाइन किया गया है और बिना दृश्य संपर्क के डिवाइस के साथ पूर्ण इंटरैक्शन प्रदान करता है। VoiceOver इंटरफ़ेस के सभी तत्वों को आवाज़ देता है: बटन, लिंक, टेक्स्ट, इमेज, नोटिफिकेशन और सिस्टम तत्व।
इस तकनीक को पहली बार 2005 में macOS के लिए पेश किया गया था, और iOS पर यह 2009 में iPhone 3GS के साथ आई। तब से, VoiceOver Apple इकोसिस्टम का एक अभिन्न अंग और प्लेटफ़ॉर्म की एक्सेसिबिलिटी के पक्ष में मुख्य तर्कों में से एक बन गया है। VoiceOver सिस्टम स्तर पर निर्मित है — इसका मतलब है कि यह डेवलपर की ओर से अतिरिक्त एकीकरण के बिना किसी भी एप्लिकेशन में काम करता है, हालांकि आवाज़ की गुणवत्ता सीधे इस बात पर निर्भर करती है कि एप्लिकेशन iOS एक्सेसिबिलिटी API का कितना अच्छा उपयोग करता है।
VoiceOver प्राकृतिक वाक् संश्लेषण के साथ 40 से अधिक भाषाओं का समर्थन करता है और क्षेत्रीय आवाज़ सेटिंग्स के अनुकूल होता है। iOS पर, VoiceOver हिंदी और कई अन्य भाषाओं के लिए Siri वॉइस इंजन का उपयोग करता है, जो विराम चिह्न और संदर्भ के आधार पर सबसे प्राकृतिक ध्वनि और सही स्वर सुनिश्चित करता है।
VoiceOver टच इवेंट को इंटरसेप्ट करता है और उन्हें मानक iOS इनपुट से अलग तरीके से व्याख्या करता है। जब उपयोगकर्ता स्क्रीन को छूता है, तो VoiceOver उंगली के नीचे के तत्व को सक्रिय नहीं करता, बल्कि पहले उसे आवाज़ देता है। केवल डबल-टैप के बाद ही तत्व सक्रिय होता है। यह मुख्य अंतर नेत्रहीन उपयोगकर्ताओं को आकस्मिक क्लिक के जोखिम के बिना इंटरफ़ेस का अन्वेषण करने की अनुमति देता है।
VoiceOver इंटरफ़ेस तत्वों को तार्किक क्रम में पढ़ता है: बाएँ से दाएँ, ऊपर से नीचे। पढ़ने का क्रम iOS व्यू पदानुक्रम से प्राप्त होता है, लेकिन डेवलपर जटिल लेआउट के लिए accessibilityElements प्रॉपर्टी के माध्यम से इसे बदल सकता है। उपयोगकर्ता दाएँ स्वाइप (अगला) और बाएँ स्वाइप (पिछला) करके तत्वों के बीच जा सकता है, साथ ही किसी विशिष्ट तत्व को छूकर उसे आवाज़ दे सकता है।
प्रत्येक गति के साथ, VoiceOver तत्व का प्रकार (बटन, लिंक, शीर्षक), उसका नाम (accessibilityLabel), स्थिति (चयनित, अक्षम) और संकेत (accessibilityHint) बोलता है। यदि तत्व में कोई मान है — उदाहरण के लिए, वॉल्यूम स्लाइडर — तो VoiceOver उसे भी आवाज़ देता है। एक्सेसिबिलिटी ट्रेट्स (UIAccessibilityTraits) उपयोगकर्ता को तत्व के व्यवहार के बारे में अतिरिक्त जानकारी देते हैं: क्या यह बटन, स्विच, खोज फ़ील्ड या कीबोर्ड कुंजी है।
रोटर एक वर्चुअल एडजस्टमेंट डायल है जो VoiceOver नेविगेशन मोड को बदलता है। उपयोगकर्ता दो अंगुलियों से रोटर को घुमाता है (वॉल्यूम नॉब की तरह) और एक मोड चुनता है: शब्द, वर्ण, शीर्षक, लिंक, प्रवेश बिंदु, तालिका पंक्तियाँ और अन्य। शीर्षक मोड वेब पेजों और एप्लिकेशन में H1-H6 के बीच त्वरित स्विचिंग की अनुमति देता है, जबकि वर्ण मोड टेक्स्ट को अक्षर दर अक्षर बोलता है, जो फ़ॉर्म भरते समय या सत्यापन कोड दर्ज करते समय उपयोगी है।
डेवलपर UIAccessibilityCustomRotor API के माध्यम से रोटर में कस्टम मोड जोड़ सकता है। उदाहरण के लिए, नोट्स एप्लिकेशन में, “पसंदीदा नोट्स” या “हाल के बदलाव” रोटर जोड़ा जा सकता है। कस्टम रोटर विशिष्ट एप्लिकेशन में नेविगेशन को काफी तेज करते हैं और iOS एक्सेसिबिलिटी के लिए सर्वोत्तम अभ्यास माने जाते हैं।
VoiceOver जेस्चर का अपना सेट उपयोग करता है जो मानक iOS जेस्चर से मेल नहीं खाता। अधिकांश जेस्चर एक के बजाय तीन अंगुलियों से किए जाते हैं — यह सामान्य संचालन के साथ टकराव को रोकता है और VoiceOver को मानक इनपुट के साथ एक साथ काम करने की अनुमति देता है।
| क्रिया | जेस्चर | परिणाम |
|---|---|---|
| तत्व को आवाज़ दें | 1 अंगुली से टैप | तत्व का नाम बोलता है |
| सक्रिय करें | डबल-टैप | बटन या लिंक दबाता है |
| अगला तत्व | दाएँ स्वाइप | अगले पर जाएँ |
| पिछला तत्व | बाएँ स्वाइप | पिछले पर वापस जाएँ |
| स्क्रॉल | 3 अंगुलियों से स्वाइप | सूची या पेज स्क्रॉल करें |
| रोटर | 2 अंगुलियों से घुमाएँ | नेविगेशन मोड बदलें |
डबल-टैप जेस्चर VoiceOver में तत्वों को सक्रिय करने का मुख्य तरीका है। यदि किसी तत्व को विशेष क्रिया की आवश्यकता है (उदाहरण के लिए, ड्रैग करना), तो VoiceOver मूव मोड में प्रवेश करने के लिए “टैप — डबल-टैप और होल्ड” अनुक्रम का उपयोग करता है। यह स्क्रीन देखे बिना ड्रैग-एंड-ड्रॉप जैसे जटिल जेस्चर करने की अनुमति देता है। VoiceOver क्रिया रद्द करने के लिए “दो अंगुलियों से डबल-टैप” और स्क्रीन कर्वन (Screen Curtain) को चालू/बंद करने के लिए “ट्रिपल-टैप” जेस्चर का भी समर्थन करता है।
iOS एप्लिकेशन डेवलपर UIAccessibility API के माध्यम से VoiceOver इंटरैक्शन में काफी सुधार कर सकता है। बुनियादी एक्सेसिबिलिटी सेटिंग्स Interface Builder (Identity Inspector → Accessibility) में जोड़ी जाती हैं, लेकिन जटिल इंटरफ़ेस के लिए कोड में प्रोग्रामेटिक कॉन्फ़िगरेशन की आवश्यकता होती है।
accessibilityLabel प्रॉपर्टी वह टेक्स्ट सेट करती है जो VoiceOver तत्व के लिए बोलता है। यदि लेबल सेट नहीं है, तो VoiceOver बटन टेक्स्ट या टेक्स्ट फ़ील्ड प्लेसहोल्डर का उपयोग करता है। बिना टेक्स्ट वाले तत्वों (आइकन, कस्टम व्यू) के लिए लेबल अनिवार्य है। 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 समर्थन सक्षम करता है — डिफ़ॉल्ट रूप से यह केवल मानक तत्वों (UIButton, UILabel, UITextField) के लिए सही है। accessibilityHint पैरामीटर एक संकेत जोड़ता है: VoiceOver इसे विराम के बाद बोलता है यदि उपयोगकर्ता किसी तत्व पर रुकता है। संकेत को क्रिया के परिणाम का वर्णन करना चाहिए, निर्देश का नहीं: “सेटिंग्स स्क्रीन खोलता है” न कि “खोलने के लिए दबाएँ”.
जटिल स्क्रीन के लिए जहां तत्वों का तार्किक समूह दृश्य क्रम से मेल नहीं खाता, 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 के लिए सही एक्सेसिबिलिटी कॉन्फ़िगरेशन में कई पहलुओं पर ध्यान देने की आवश्यकता है: सिमैंटिक मार्कअप, डायनामिक अपडेट, कस्टम तत्व प्रबंधन और वास्तविक स्क्रीन रीडर के साथ परीक्षण।
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 जेस्चर के साथ मान बदलने की क्षमता जोड़ता है: ऊपर स्वाइप — बढ़ाएँ, नीचे स्वाइप — घटाएँ। इस मॉडिफ़ायर के बिना, स्लाइडर स्क्रीन रीडर नियंत्रण के लिए दुर्गम रहेगा। कस्टम स्टेपर, पिकर और अन्य तत्वों के लिए समान कॉन्फ़िगरेशन की आवश्यकता होती है जो अपना मान बदलते हैं।
जब स्क्रीन पर सामग्री डायनामिक रूप से बदलती है (कोई नोटिफिकेशन आता है, लोडिंग स्थिति अपडेट होती है, कीमत बदलती है), तो VoiceOver को UIAccessibility.post के माध्यम से एक नोटिफिकेशन प्राप्त करना चाहिए। इस कॉल के बिना, स्क्रीन रीडर को बदलावों के बारे में पता नहीं चलेगा और उपयोगकर्ता महत्वपूर्ण जानकारी से चूक जाएगा। SwiftUI के लिए, .accessibilityAnnouncement() मॉडिफ़ायर का उपयोग किया जाता है।
UIAccessibility.post(
notification: .announcement,
argument: "कीमत 20 प्रतिशत कम हुई"
)
// SwiftUI
Text("कीमत अपडेट की गई")
.accessibilityAnnouncement(Text("20% छूट"))
VoiceOver नोटिफिकेशन का उपयोग समझदारी से करना चाहिए: अत्यधिक घोषणाएं उपयोगकर्ता को परेशान करती हैं, जबकि उनकी अनुपस्थिति एप्लिकेशन को दुर्गम बना देती है। इष्टतम रणनीति केवल उन बदलावों की घोषणा करना है जो उपयोगकर्ता के वर्तमान कार्यप्रवाह को प्रभावित करते हैं: कार्ट अपडेट, लोडिंग स्थिति, फ़ॉर्म सत्यापन त्रुटि, चैट नोटिफिकेशन। पृष्ठभूमि बदलाव (पैनल पर समय, मुद्रा दरें) घोषणा की आवश्यकता नहीं है — उपयोगकर्ता आवश्यकता होने पर उन्हें स्वयं जांच लेगा।
VoiceOver परीक्षण स्क्रीन रीडर चालू वाले भौतिक डिवाइस या Accessibility Inspector विकल्प वाले iOS सिम्युलेटर के माध्यम से किया जाता है। पूर्ण उपयोग परिदृश्यों का परीक्षण करना महत्वपूर्ण है: दृश्य नियंत्रण के बिना पंजीकरण पूरा करना, ऑर्डर देना, खोज द्वारा उत्पाद ढूँढना। यदि प्रवाह दृश्य प्रतिक्रिया के बिना नेविगेट करने योग्य है — तो VoiceOver सही ढंग से कॉन्फ़िगर किया गया है।
अक्सर पूछे जाने वाले प्रश्न
सेटिंग्स → एक्सेसिबिलिटी → VoiceOver। स्विच चालू करें। त्वरित सक्रियण के लिए, साइड बटन (iPhone X और नए पर) या होम बटन के ट्रिपल-क्लिक का उपयोग करें। Siri भी “VoiceOver चालू करें” कमांड से VoiceOver चालू कर सकता है।
VoiceOver iOS के लिए Apple का स्क्रीन रीडर है, TalkBack Android के लिए Google का स्क्रीन रीडर है। कार्य सिद्धांत समान है: स्पर्श आवाज़ देता है, डबल-टैप सक्रिय करता है। अंतर जेस्चर, रोटर सेटिंग्स और इकोसिस्टम एकीकरण में है: VoiceOver iCloud और Apple Pay के साथ अधिक गहराई से एकीकृत है।
UIAccessibility API का उपयोग करें: सभी तत्वों के लिए accessibilityLabel, तत्व प्रकार के लिए accessibilityTraits और संकेतों के लिए accessibilityHint सेट करें। SwiftUI में, .accessibilityLabel() और .accessibilityAddTraits() मॉडिफ़ायर का उपयोग करें। VoiceOver चालू करके एप्लिकेशन का परीक्षण करें।
रोटर एक नेविगेशन मोड है जो दो अंगुलियों को घुमाकर बदला जाता है। यह निर्धारित करता है कि तत्वों के बीच कैसे जाना है: शीर्षक, वर्ण, शब्द, लिंक या प्रवेश बिंदु द्वारा। डेवलपर्स UIAccessibilityCustomRotor के माध्यम से अपने स्वयं के मोड जोड़ सकते हैं।
कस्टम UIView के लिए, isAccessibilityElement = true सेट करना और accessibilityLabel प्रदान करना आवश्यक है। यदि तत्व कई चाइल्ड व्यू से बना है, तो पढ़ने का क्रम सेट करने के लिए accessibilityElements का उपयोग करें या उन्हें एक कंटेनर में संयोजित करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें