खोज…
परिचय
IOS में एक्सेसिबिलिटी, सुनने की अक्षमता और दृश्य दोष वाले उपयोगकर्ताओं को iOS और आपके एप्लिकेशन को वॉयसओवर, वॉयस कंट्रोल, व्हाइट ऑन ब्लैक, मोनो ऑडियो, स्पीच टू टेक्स्ट आदि का समर्थन करके अनुमति देता है। IOS ऐप में एक्सेसिबिलिटी प्रदान करने का मतलब है ऐप को सभी के लिए उपयोगी बनाना।
एक दृश्य एक्सेस करने योग्य बनाएं
अपने UIView
उपवर्ग को एक सुलभ तत्व के रूप में चिह्नित करें ताकि वह VoiceOver को दिखाई दे।
myView.isAccessibilityElement = YES;
सुनिश्चित करें कि दृश्य एक सार्थक लेबल, मूल्य और संकेत बोलता है। एक्सेसिबिलिटी प्रोग्रामिंग गाइड में अच्छे विवरण कैसे चुनें, इस पर Apple अधिक विवरण प्रदान करता है।
एक्सेसिबिलिटी फ़्रेम
एक्सेस टेबिलिटी का उपयोग वॉयसओवर द्वारा हिट टेस्टिंग टच के लिए किया जाता है, वॉयसओवर कर्सर को आरेखित करते हुए, उपयोगकर्ता द्वारा स्क्रीन को डबल-टैप करने पर टैप को अनुकरण करने के लिए केंद्रित तत्व में गणना की जाती है। ध्यान दें कि फ्रेम स्क्रीन निर्देशांक में है!
myElement.accessibilityFrame = frameInScreenCoordinates;
यदि आपके तत्व या स्क्रीन लेआउट अक्सर बदलते हैं, तो ओवरराइडिंग पर विचार करें - accessibilityFrame
फ़्रेम हमेशा अप-टू-डेट आय प्रदान करने के लिए। स्क्रॉल दृश्य उप-साक्षात्कार के स्क्रीन-सापेक्ष फ्रेम की गणना त्रुटि-प्रवण और थकाऊ हो सकती है। iOS 10 इसे आसान बनाने के लिए एक नया एपीआई पेश करता है: accessibilityFrameInContainerSpace
।
स्क्रीन चेंज
वॉयसओवर समय के सबसे महान काम करता है, पूरी तरह से सामग्री से भरा जोर से स्क्रीन पढ़ने और उपयोगकर्ता के बाद सहजता से। काश, कोई भी सामान्य उपाय सही नहीं होता। कभी-कभी केवल आप, ऐप डेवलपर, जानते हैं कि वॉइसओवर को एक इष्टतम उपयोगकर्ता अनुभव के लिए कहाँ केंद्रित किया जाना चाहिए। सौभाग्य से, वॉयसओवर जहां ध्यान केंद्रित है, उसके बारे में सुराग के लिए सिस्टम एक्सेसिबिलिटी नोटिफिकेशन सुनता है। वॉयसओवर कर्सर को मैन्युअल रूप से ले जाने के लिए, एक्सेसिबिलिटी स्क्रीन बदले हुए नोटिफिकेशन को पोस्ट करें:
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, firstElement);
जब यह सूचना पोस्ट की जाती है, तो टोन की एक छोटी श्रृंखला उपयोगकर्ताओं को परिवर्तन की सूचना देती है। दूसरा पैरामीटर फोकस को बदलने के लिए या स्ट्रिंग की घोषणा करने वाला अगला तत्व हो सकता है। यदि वॉयसओवर अनुभव इसके बिना खराब है और कोई अन्य समाधान मौजूद नहीं है, तो केवल एक स्क्रीन परिवर्तन अधिसूचना पोस्ट करें। वॉइसओवर कर्सर को ले जाना एक देखे हुए उपयोगकर्ता की स्क्रीन पर पोक करने जैसा है। यह उस तरह के चारों ओर ले जाने के लिए कष्टप्रद और भटकाव हो सकता है।
लेआउट बदलें
कई मामलों में, एक स्क्रीन के भीतर की सामग्री नई या अलग सामग्री के साथ अपडेट होगी। उदाहरण के लिए, एक ऐसे रूप की कल्पना करें जो पिछले प्रश्न के उपयोगकर्ता के उत्तर के आधार पर अतिरिक्त विकल्पों को प्रकट करता है। इस स्थिति में, एक "लेआउट परिवर्तन" अधिसूचना से आप या तो परिवर्तन की घोषणा कर सकते हैं या एक नए तत्व पर ध्यान केंद्रित कर सकते हैं। यह अधिसूचना उन्हीं मापदंडों को स्वीकार करती है जैसे स्क्रीन परिवर्तन अधिसूचना।
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstElement);
घोषणा
घोषणाएँ उपयोगकर्ताओं को ऐसी घटनाओं के लिए उपयोगी होती हैं, जिन्हें "स्क्रीन लॉक" या "समाप्त लोडिंग" जैसी किसी भी सहभागिता की आवश्यकता नहीं होती है। स्क्रीन परिवर्तन या अधिक छोटे लेआउट परिवर्तनों के उपयोगकर्ताओं को सूचित करने के लिए अधिक विशिष्ट घोषणा का उपयोग करें।
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"The thing happened!");
आदेश देने वाले तत्व
वॉइसओवर शीर्ष-बाएँ से नीचे-दाएँ, दृश्य पदानुक्रम के बावजूद नेविगेट करता है। यह आमतौर पर इस तरह से सामग्री को बाएं से दाएं भाषाओं में व्यवस्थित किया जाता है क्योंकि दृष्टि वाले व्यक्ति स्क्रीन को "एफ-आकार के पैटर्न" में स्कैन करते हैं। VoiceOver उपयोगकर्ता उसी तरह नेविगेट करने की अपेक्षा करेंगे जैसे कि विशिष्ट उपयोगकर्ता करते हैं। अभिगम्यता के लिए पूर्वनिर्धारणता और संगति बहुत महत्वपूर्ण है। कृपया ऐसे अनुकूलन बनाने से परहेज करें जो डिफ़ॉल्ट व्यवहार पर "सुधार" करते हैं (जैसे कि स्वाइप ऑर्डर में टैब बार को क्रमबद्ध करना)। उस ने कहा, यदि आपको प्रतिक्रिया मिली है कि आपके ऐप में तत्वों का क्रम आश्चर्यजनक है, तो कुछ तरीके हैं जिनसे आप अनुभव को बेहतर बना सकते हैं।
अगर वॉयसओवर को एक के बाद एक व्यूज़ के सबव्यू पढ़ना चाहिए, लेकिन ऐसा नहीं है, तो आपको वॉइसओवर को संकेत देना पड़ सकता है कि किसी एक व्यू के भीतर मौजूद एलिमेंट्स संबंधित हैं। आप की स्थापना करके ऐसा कर सकते हैं shouldGroupAccessibiltyChildren
:
myView.shouldGroupAccessibilityChildren = YES;
जटिल नेविगेशन संरचनाओं का समर्थन करने के लिए जो कई कंटेनरों को फैलाते हैं या इसमें UIKit के बिना प्रदान किए गए इंटरफेस शामिल हैं, मूल दृश्य पर कंटेनर प्रोटोकॉल को लागू करने पर विचार करें।
पहुंच कंटेनर
योग्यता आईओएस के कई ऐप्लिकेशन नेविगेट क्योंकि ज्यादातर सकते हैं UIKit
वर्गों को लागू UIAccessibilityProtocol
। UIView
का उपयोग करते हुए ऑनस्क्रीन तत्वों का प्रतिनिधित्व नहीं करने वाली विशेषताएं, जिनमें ड्राइंग बनाने के लिए कोर ग्राफिक्स या धातु का उपयोग करने वाले एप्लिकेशन शामिल हैं, इन तत्वों को पहुंच के लिए वर्णन करना चाहिए। IOS 8.0 के अनुसार, यह UIView
पर एक संपत्ति असाइन करके किया जा सकता है जिसमें दुर्गम तत्व होते हैं:
myInaccessibleContainerView.accessibilityElements = @[elements, that, should, be, accessible];
सरणी में प्रत्येक वस्तु का एक उदाहरण हो सकता है UIAccessibilityElement
या किसी अन्य वर्ग का पालन करता है UIAccessibilityProtocol
। बाल तत्वों को उस क्रम में वापस किया जाना चाहिए जिस क्रम में उपयोगकर्ता को उन्हें नेविगेट करना चाहिए। एप्लिकेशन लेखक के रूप में, आप वॉयसओवर स्वाइप नेविगेशन के निचले-दाएं क्रम में डिफ़ॉल्ट टॉप-लेफ्ट को ओवरराइड करने के लिए एक्सेसिबिलिटी कंटेनरों का उपयोग कर सकते हैं। यह देखते हुए कि UIView
लागू करता UIAccessibilityProtocol
, आप की घटनाओं को जोड़ सकते हैं UIAccessibilityElement
और UIView
बच्चे पहुंच तत्वों का एक ही सरणी में। ध्यान दें कि यदि आप तत्वों को मैन्युअल रूप से असाइन करते हैं, तो आपको किसी भी गतिशील एक्सेसिबिलिटी प्रोटोकॉल विधियों को लागू करने की आवश्यकता नहीं है, हालांकि आपको वॉइसओवर द्वारा पहचाने जाने वाले तत्वों के लिए एक स्क्रीन परिवर्तन अधिसूचना जारी करने की आवश्यकता हो सकती है।
मोडल व्यू
एक कार्य पूरा होने तक मॉडल के विचार उपयोगकर्ता के ध्यान को पूरी तरह से पकड़ लेते हैं। आईओएस उपयोगकर्ताओं को यह स्पष्ट करता है कि जब एक सतर्क दृश्य या पॉपओवर जैसे एक मोडल दृश्य दिखाई देता है, तो अन्य सभी सामग्री को डिमिंग और अक्षम करके। एक ऐप जो एक कस्टम मोडल इंटरफ़ेस लागू करता है, वॉइसओवर को संकेत देने की आवश्यकता है कि यह दृश्य accessibilityViewIsModal
व्यूआईमोडल सेट करके उपयोगकर्ता के अविभाजित ध्यान देने accessibilityViewIsModal
। ध्यान दें कि यह संपत्ति केवल मोडल सामग्री वाले दृश्य पर सेट होनी चाहिए, न कि किसी मोडल दृश्य के भीतर मौजूद तत्व।
myModalView.accessibilityViewIsModal = YES;
मोडल के रूप में एक दृश्य को टैग करना वॉयसओवर को भाई-बहनों के विचारों को अनदेखा करने के लिए प्रोत्साहित करता है। यदि, इस संपत्ति को सेट करने के बाद, आप पाते हैं कि VoiceOver अभी भी आपके ऐप में अन्य तत्वों को नेविगेट करता है, तो मोडल खारिज होने तक समस्या के दृश्य छिपाने की कोशिश करें।
छिपने के तत्व
UIView सहित अधिकांश UIKit कक्षाएं, UIAccessibilityProtocol
का पालन UIAccessibilityProtocol
और डिफ़ॉल्ट रूप से सही मान UIAccessibilityProtocol
। यह स्वीकार करना आसान है कि छिपा हुआ एक UIView
पहुँच-योग्यता पदानुक्रम से अनुपस्थित है और VoiceOver द्वारा नेविगेट नहीं किया जाएगा। हालांकि यह डिफ़ॉल्ट व्यवहार आमतौर पर पर्याप्त होता है, ऐसे समय होते हैं जहां दृश्य पदानुक्रम में मौजूद होगा, लेकिन दृश्य या नेविगेट करने योग्य नहीं होगा। उदाहरण के लिए, बटन के एक संग्रह को दूसरे दृश्य द्वारा ओवरलैप किया जा सकता है, जो उन्हें एक देखे गए उपयोगकर्ता के लिए अदृश्य प्रदान करता है। वॉयसओवर, हालांकि, अभी भी उन्हें नेविगेट करने की कोशिश करेगा क्योंकि वे तकनीकी रूप से UIKit
से छिपे नहीं हैं और इसलिए अभी भी पहुंच पदानुक्रम में मौजूद हैं। ऐसे मामलों में, आपको वॉइसओवर को संकेत देना चाहिए कि माता-पिता का दृश्य सुलभ नहीं है। आप यह स्पष्ट रूप से UIKit से दृश्य छिपाकर सेट कर सकते हैं जब दृश्य बंद हो जाता है तो छिपा कर:
myViewFullofButtons.hidden = YES;
वैकल्पिक रूप से, आप माता-पिता को दृश्यमान छोड़ सकते हैं और अपने बच्चों को अभिगम्यता पदानुक्रम से छिपा सकते हैं:
myViewFullofButtons.accessibilityElementsHidden = YES;
अस्थायी दृश्य एक अन्य स्थान है जहां आप उपयोगकर्ताओं को दृश्यमान छोड़ते समय तत्वों को पहुंच पदानुक्रम से छुपाना चाहेंगे। उदाहरण के लिए, जब आप वॉल्यूम बटन दबाते हैं तो जो दृश्य दिखाई देता है वह उपयोगकर्ताओं को दिखाई देता है, लेकिन सामान्य अलर्ट के तरीके पर ध्यान देने की मांग नहीं करता है। आप चाहते हैं कि वॉइसओवर उपयोगकर्ता को बाधित न करे और नए वॉल्यूम की घोषणा करने के लिए जो कुछ भी वे कर रहे थे उससे कर्सर को दूर करें, विशेष रूप से यह देखते हुए कि वॉल्यूम समायोजित करना पहले से ही क्लिक ध्वनि के माध्यम से श्रवण प्रतिक्रिया प्रदान करता है। इस तरह के मामलों में, आप accessibilityElementsHidden
का उपयोग करके दृश्य छिपाना चाहेंगे।