Доступность с точки зрения контроллера представления

Кроме управления поведением представления, контроллер представления может также помочь управлять доступностью приложения. Доступное приложение является тем, которое может использоваться всеми, независимо от нетрудоспособности или физического ухудшения, при сохранении его функциональности и удобства пользования как полезный инструмент.

Чтобы быть доступным, приложение для iOS должно предоставить информацию о своих элементах пользовательского интерфейса пользователям VoiceOver. VoiceOver, читающая экран технология, разработанная для помощи слабовидящему, говорит вслух текст, изображения, и средства управления UI вывели на экран экран, так, чтобы не видящие люди могли все еще взаимодействовать с этими элементами. Объекты UIKit доступны по умолчанию, но существуют все еще вещи, которые можно сделать с точки зрения контроллера представления для обращения доступности. На высоком уровне это означает, что необходимо удостовериться что:

В дополнение к этим основным принципам контроллер представления может улучшить опыт пользователя VoiceOver путем установки позиции фокусирующего кольца VoiceOver программно, ответа на специальные жесты VoiceOver и наблюдения уведомлений доступности.

Перемещение курсора VoiceOver к определенному элементу

Когда расположение экрана изменяется, фокусирующее кольцо VoiceOver, также известное как курсор VoiceOver, сбрасывает свою позицию к первому элементу, выведенному на экран на экране слева направо и от начала до конца. Вы могли бы решить изменить первый элемент земли курсора VoiceOver на том, когда представления представлены на экране.

Например, когда контроллер навигации продвигает контроллер представления на штабель навигации, курсор VoiceOver падает на Кнопку «Назад» панели навигации. В зависимости от Вашего приложения могло бы иметь больше смысла перемещать его в заголовок панели навигации вместо этого, или к любому другому элементу.

Для этого вызовите UIAccessibilityPostNotification использование обоих уведомление UIAccessibilityScreenChangedNotification (который говорит VoiceOver, что содержание экрана изменилось), и элемент, который требуется дать фокусу, как показано в Перечислении 9-1.

Перечисление 9-1  , Отправляющее уведомление доступности, может изменить первый читаемый вслух элемент

@implementation MyViewController
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
 
    UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
                                    self.myFirstElement);
}
@end

Если только изменения макета, а не содержание экрана, такой, переключаясь от портрета до альбомного режима, используют уведомление UIAccessibilityLayoutChangedNotification вместо UIAccessibilityScreenChangedNotification.

Ответ на специальные жесты VoiceOver

Существуют специальные жесты, которые пользователи VoiceOver могут выполнить для инициирования пользовательских действий. Эти жесты являются особенными, потому что Вам разрешают определить их поведение, в отличие от стандартных жестов VoiceOver. Можно обнаружить жесты путем переопределения определенных методов в представлениях или просмотреть контроллеры.

Жест сначала проверяет представление, сделавшее, чтобы VoiceOver фокусировался для инструкции, и продолжающее цепочку респондента, пока это не находит реализацию соответствующего метода жеста VoiceOver. Если никакая реализация не найдена, действие системного значения по умолчанию для того жеста инициировано. Например, Волшебное воспроизведение музыки игр и пауз жеста Касания из Музыкального приложения, если никакая Волшебная реализация Касания не найдена от текущего представления до делегата приложения.

Несмотря на то, что можно обеспечить любую пользовательскую логику, Вы хотите, пользователи VoiceOver ожидают, что действия этих специальных жестов будут следовать определенным инструкциям. Как любой жест, Ваша реализация жеста VoiceOver должна следовать за образцом так, чтобы взаимодействие с доступным приложением осталось интуитивным.

Существует пять специальных жестов VoiceOver:

Escape

При представлении представления, что содержание оверлейных программ — такое как модальное диалоговое окно или предупреждение — необходимо переопределить accessibilityPerformEscape метод для отклонения наложения. Функция жеста Escape походит на функцию Esc включите компьютерную клавиатуру; это отменяет временное диалоговое окно или лист для раскрытия основного содержания.

Другой вариант использования для переопределения жеста Escape должен был бы возвратиться один уровень в иерархии навигации. UINavigationController реализации эта функциональность по умолчанию. При разработке собственного вида контроллера навигации необходимо установить жест Escape для пересечения одного уровня штабеля навигации, потому что это - функциональность, которую ожидают пользователи VoiceOver.

Волшебное касание

Цель Волшебного жеста Касания состоит в том, чтобы быстро выполнить часто используемое или наиболее предназначенное действие. Например, в Телефонном приложении, это берет или зависает телефонный вызов. В приложении Часов это запускает и останавливает секундомер. Если Вы хотите, чтобы действие стреляло из жеста независимо от представления, курсор VoiceOver идет, необходимо реализовать accessibilityPerformMagicTap метод в Вашем контроллере представления.

Прокрутка с тремя пальцами

accessibilityScroll: когда пользователь VoiceOver выполняет прокрутку с тремя пальцами, метод стреляет. Это принимает a UIAccessibilityScrollDirection параметр, от которого можно определить направление прокрутки. Если у Вас есть пользовательское представление прокрутки, может быть более надлежащим реализовать это на самом представлении.

Инкремент и декремент

accessibilityIncrement и accessibilityDecrement методы требуются для элементов с корректируемой чертой и должны быть реализованы на самих представлениях.

Наблюдение уведомлений доступности

Можно прислушаться к уведомлениям доступности для инициирования методов обратного вызова. При определенных обстоятельствах UIKit запускает уведомления доступности, которые Ваше приложение может наблюдать для расширения его доступной функциональности.

Например, если Вы прислушиваетесь к уведомлению UIAccessibilityAnnouncementDidFinishNotification, можно инициировать метод, чтобы проконтролировать завершение речи VoiceOver. Apple делает это в приложении iBook. iBook запускают уведомление, когда VoiceOver заканчивает говорить строку в книге, инициировавшей следующую строку, на которой будут говорить. Если это - последняя строка на странице, логика в обратном вызове говорит iBook поворачивать страницу и продолжать читать как только последний разговор концов строки. Это допускает линию за линией степень гранулярности для навигации по тексту при обеспечении бесшовного, непрерывного опыта чтения.

Для регистрации как наблюдатель для уведомлений доступности используйте центр уведомления по умолчанию. Тогда создайте метод с тем же именем, которое Вы предусматриваете selector параметр, как показано в Перечислении 9-2.

Перечисление 9-2  , Регистрирующееся как наблюдатель для уведомлений доступности

@implementation MyViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
 
    [[NSNotificationCenter defaultCenter]
        addObserver:self
           selector:@selector(didFinishAnnouncement:)
               name:UIAccessibilityAnnouncementDidFinishNotification
             object:nil];
}
 
- (void)didFinishAnnouncement:(NSNotification *)dict
{
    NSString *valueSpoken = [[dict userInfo] objectForKey:UIAccessibilityAnnouncementKeyStringValue];
    NSString *wasSuccessful = [[dict userInfo] objectForKey:UIAccessibilityAnnouncementKeyWasSuccessful];
    // ...
}
@end

UIAccessibilityAnnouncementDidFinishNotification ожидает NSNotification словарь в качестве параметра, из которого можно определить значение, на котором говорят и завершился ли разговор непрерывный. Разговор может стать прерванным, если пользователь VoiceOver выполняет речевой жест остановки или сильно ударяет к другому элементу, прежде чем закончится объявление.

Другое полезное уведомление для подписки на UIAccessibilityVoiceOverStatusChanged. Когда VoiceOver становится включенным или выключенным, это может обнаружить. Если VoiceOver переключается за пределами Вашего приложения, Вы получаете уведомление, когда Ваше приложение возвращено в передний план. Поскольку UIAccessibilityVoiceOverStatusChanged не ожидает параметров, метод в Вашем селекторе не должен добавлять запаздывающее двоеточие (:).

Для полного списка возможных уведомлений можно наблюдать, консультироваться с «Уведомлениями» в Ссылке на протокол UIAccessibility. Помните, что можно только наблюдать уведомления, которые могут быть отправлены UIKit, которые являются NSString объекты, и не уведомления, которые могут быть отправлены Вашим приложением, которые имеют тип int.