Szukaj…


Wprowadzenie

Ułatwienia dostępu w systemie iOS umożliwiają użytkownikom z upośledzeniem słuchu i wadami wzroku dostęp do systemu iOS i aplikacji, obsługując różne funkcje, takie jak VoiceOver, sterowanie głosem, biały na czarnym, monofoniczny dźwięk, mowa na tekst i tak dalej. Zapewnienie dostępności w aplikacji na iOS oznacza, że aplikacja będzie dostępna dla wszystkich.

Udostępnij widok

Oznacz swoją podklasę UIView jako dostępny element, aby był widoczny dla VoiceOver.

myView.isAccessibilityElement = YES;

Upewnij się, że widok mówi znaczącą etykietę, wartość i wskazówkę. Apple podaje więcej szczegółów na temat wyboru dobrych opisów w Podręczniku programowania dostępności .

Ramka dostępności

Ramka ułatwień dostępu jest używana przez VoiceOver do testowania trafień, rysowania kursora VoiceOver i obliczania, gdzie w zaznaczonym elemencie symuluje się stuknięcie, gdy użytkownik dwukrotnie stuknie ekran. Pamiętaj, że ramka ma współrzędne ekranu!

myElement.accessibilityFrame = frameInScreenCoordinates;

Jeśli elementy lub układy ekranów często się zmieniają, zastanów się nadpisaniem - accessibilityFrame aby zawsze zapewniać aktualne poprawki. Obliczanie względnej wielkości ekranu podglądu widoku przewijania może być podatne na błędy i uciążliwe. iOS 10 wprowadza nowy interfejs API, aby to ułatwić: accessibilityFrameInContainerSpace .

Zmiana ekranu

VoiceOver działa znakomicie przez większość czasu, energicznie czytając na głos ekrany pełne treści i intuicyjnie śledząc użytkownika. Niestety, żadne ogólne rozwiązanie nie jest idealne. Czasami tylko Ty, twórca aplikacji, wiesz, gdzie VoiceOver powinien koncentrować się na optymalnym doświadczeniu użytkownika. Na szczęście VoiceOver nasłuchuje powiadomień o ułatwieniach dostępu do systemu, szukając wskazówek dotyczących tego, gdzie należy fokus. Aby ręcznie przesunąć kursor VoiceOver, opublikuj powiadomienie o zmianie ekranu dostępności:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, firstElement);

Po opublikowaniu tego powiadomienia krótka seria dźwięków informuje użytkowników o zmianie. Drugim parametrem może być albo następny element do skupienia, albo ciąg informujący o zmianie. Opublikuj powiadomienie o zmianie ekranu tylko wtedy, gdy VoiceOver działa bez niego słabo i nie istnieje inne obejście. Przesuwanie kursora VoiceOver jest jak szturchanie ekranu widzącego użytkownika. Prowadzenie w ten sposób może być denerwujące i dezorientujące.

Zmiana układu

W wielu przypadkach zawartość jednego ekranu zostanie zaktualizowana o nową lub inną zawartość. Wyobraź sobie na przykład formularz, który ujawnia dodatkowe opcje w oparciu o odpowiedź użytkownika na poprzednie pytanie. W takim przypadku powiadomienie o „zmianie układu” pozwala albo ogłosić zmianę, albo skupić się na nowym elemencie. To powiadomienie akceptuje te same parametry, co powiadomienie o zmianie ekranu.

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstElement);

Ogłoszenie

Ogłoszenia są przydatne do ostrzegania użytkowników o zdarzeniach, które nie wymagają żadnej interakcji, takich jak „zablokowany ekran” lub „zakończone ładowanie”. Użyj bardziej szczegółowego ogłoszenia, aby powiadomić użytkowników o zmianach na ekranie lub drobniejszych zmianach układu.

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"The thing happened!");

Zamawianie elementów

VoiceOver porusza się od lewego górnego do prawego dolnego rogu, niezależnie od hierarchii widoku. Zwykle jest to sposób, w jaki treść jest ułożona w językach od lewej do prawej, ponieważ osoby widzące zwykle skanują ekran według „wzoru w kształcie litery F”. Użytkownicy VoiceOver będą oczekiwać nawigacji w taki sam sposób, jak zwykli użytkownicy. Przewidywalność i spójność są bardzo ważne dla dostępności. Powstrzymaj się od dostosowywania, które „poprawiają” domyślne zachowanie (np. Najpierw zamawiając pasek kart w kolejności przesuwania). To powiedziawszy, jeśli otrzymałeś informację zwrotną, że kolejność elementów w Twojej aplikacji jest zaskakująca, istnieje kilka sposobów na poprawę działania.

Jeśli VoiceOver powinien czytać widoki podrzędne jednego po drugim, ale tak nie jest, może być konieczne wskazanie VoiceOver, że elementy zawarte w jednym widoku są powiązane. Możesz to zrobić, ustawiając shouldGroupAccessibiltyChildren :

myView.shouldGroupAccessibilityChildren = YES;

Aby obsługiwać złożone struktury nawigacyjne obejmujące wiele kontenerów lub zawierające interfejsy renderowane bez UIKit, rozważ wdrożenie protokołu kontenera w widoku nadrzędnym.

Kontener dostępności

VoiceOver może poruszać się wiele aplikacji na iOS, ponieważ większość UIKit klasy implementują UIAccessibilityProtocol . Funkcje, które nie reprezentują elementów ekranowych za pomocą UIView , w tym aplikacje wykorzystujące grafikę podstawową lub metal do wykonywania rysunków, muszą opisywać te elementy dla ułatwienia dostępu. Od wersji iOS 8.0 można to zrobić, przypisując właściwość w UIView zawierającą niedostępne elementy:

myInaccessibleContainerView.accessibilityElements = @[elements, that, should, be, accessible];

Każdy obiekt w tablicy może być instancją UIAccessibilityElement lub dowolną inną klasą UIAccessibilityProtocol z UIAccessibilityProtocol . Elementy potomne powinny być zwracane w kolejności, w której użytkownik powinien nimi nawigować. Jako autor aplikacji możesz użyć kontenerów ułatwień dostępu, aby zastąpić domyślną kolejność przesuwania palcem po palecie od lewej do prawej. Biorąc pod uwagę, że UIView implementuje UIAccessibilityProtocol , możesz łączyć instancje UIAccessibilityElement i UIView w tej samej tablicy elementów dostępności UIAccessibilityElement . Pamiętaj, że jeśli przypisujesz elementy ręcznie, nie musisz implementować żadnych metod protokołu dynamicznej dostępności, chociaż może być konieczne wydanie powiadomienia o zmianie ekranu dla elementów wykrywanych przez VoiceOver.

Widok modalny

Widoki modalne całkowicie przyciągają uwagę użytkownika, dopóki zadanie nie zostanie ukończone. iOS wyjaśnia to użytkownikom, przyciemniając i wyłączając całą inną zawartość, gdy widoczny jest widok modalny, taki jak alarm lub popover. Aplikacja, która implementuje niestandardowy interfejs modalny, musi poinformować VoiceOver, że ten widok zasługuje na niepodzielną uwagę użytkownika poprzez ustawienie accessibilityViewIsModal . Zauważ, że ta właściwość powinna być ustawiona tylko w widoku zawierającym zawartość modalną, a nie elementy zawarte w widoku modalnym.

myModalView.accessibilityViewIsModal = YES;

Oznaczanie widoku jako modalnego zachęca VoiceOver do ignorowania widoków rodzeństwa. Jeśli po ustawieniu tej właściwości okaże się, że VoiceOver nadal porusza się po innych elementach aplikacji, spróbuj ukryć widoki problemów, dopóki modal nie odrzuci.

Ukrywanie elementów

Większość klas UIKit, w tym UIView, jest UIAccessibilityProtocol z UIAccessibilityProtocol i UIAccessibilityProtocol zwraca poprawne wartości. Łatwo jest przyjąć za pewnik, że ukryty zestaw UIView jest również nieobecny w hierarchii dostępności i nie jest obsługiwany przez VoiceOver. Chociaż to domyślne zachowanie jest zwykle wystarczające, są chwile, w których widok będzie obecny w hierarchii widoków, ale nie będzie widoczny ani możliwy do nawigacji. Na przykład zbiór przycisków może nakładać się na inny widok, co czyni je niewidocznymi dla widzącego użytkownika. VoiceOver będzie jednak nadal próbował się nimi poruszać, ponieważ technicznie nie są one ukryte przed UIKit i dlatego nadal są obecne w hierarchii dostępności. W takich przypadkach musisz wskazać VoiceOver, że widok nadrzędny jest niedostępny. Możesz to zrobić, jawnie ukrywając widok przed UIKit, ustawiając ukryty, gdy widok zniknie z ekranu:

myViewFullofButtons.hidden = YES;

Alternatywnie możesz pozostawić widok rodzica widoczny i po prostu ukryć jego elementy podrzędne w hierarchii dostępności:

myViewFullofButtons.accessibilityElementsHidden = YES;

Widoki tymczasowe to kolejne miejsce, w którym chcesz ukryć elementy z hierarchii dostępności, pozostawiając je widocznymi dla użytkowników. Na przykład widok, który pojawia się po naciśnięciu przycisku głośności, jest widoczny dla widzących użytkowników, ale nie wymaga uwagi, tak jak normalny alert. Nie chciałbyś, aby VoiceOver przeszkadzał użytkownikowi i odsunął kursor od tego, co robili, aby ogłosić nowy poziom głośności, zwłaszcza biorąc pod uwagę, że regulacja głośności już zapewnia informacje dźwiękowe poprzez wydawany dźwięk kliknięcia. W takich przypadkach będziesz chciał ukryć widok za pomocą accessibilityElementsHidden .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow