Возврат в главное меню при длительном нажатии кнопки переключения доступа

Я создаю игру, специально предназначенную для игры с использованием переключателя доступа. Игра динамически строит сетку кнопок на основе уровня, чтобы имитировать сетку значков iPad. С характером доступа к переключателю у меня не может быть кнопки «Назад», чтобы вернуться в главное меню, так как это будет учитываться в игре как кнопка и будет включено во вкладку через пользователя.

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

Вот код, который я использую, который работает в симуляторе.

Добавление UILongPressGestureRecognizer к кнопке.

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(UILongPressBack:)];
        [self.button addGestureRecognizer:longPress];

Метод вызывается при длительном нажатии.

- (IBAction)UILongPressBack:(UILongPressGestureRecognizer*)sender {
       if (sender.state == UIGestureRecognizerStateEnded) {
       MainViewController * mainPage = [[MainViewController alloc]init];
       [self presentViewController:mainPage animated:YES completion:nil];       
       }
 }  

Насколько я понимаю, элементы управления доступом к коммутатору работают так же, как клавиатура Bluetooth (именно так я сейчас и тестирую). При настройке кнопок доступа к переключателю я сопоставляю каждую из них с определенной клавишей клавиатуры.

Кто-нибудь знает, как я могу заставить это работать? Я подумал об отключении кнопки во время игры и повторном включении ее между уровнями, но тогда у пользователя не будет возможности вернуться в главное меню в середине игры, если они того пожелают, что, как мне кажется, было бы плохим дизайном.

Спасибо за любую помощь.


person arhkfp    schedule 05.08.2015    source источник


Ответы (1)


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

Добавление пользовательского действия

Если вы хотите предложить действие, уникальное для пользователей вспомогательных технологий, реализуйте -accessibilityCustomActions. Это позволяет пользователям выбирать из набора определяемых приложением действий в дополнение к стандартному для системы действию активировать.

Код

Например, чтобы выставить пользовательское действие foo и отреагировать на него на пустом UIView, можно реализовать:

- (BOOL)isAccessibilityElement
{
    return YES;
}

- (NSArray *)accessibilityCustomActions
{
    UIAccessibilityCustomAction *fooAction = [[UIAccessibilityCustomAction alloc] initWithName:@"FooAction" target:self selector:@selector(foo)];
    return @[fooAction];
}

- (void)foo
{
    NSLog(@"foo");
}

Вывод

Запустив приведенный выше код с включенным Switch Control, вы увидите пункт меню для нового действия:

Пустой серый вид, выделенный синим курсором Switch Control. Видно меню с параметрами Tap и FooAction

Изменить:

В комментариях вы спросите, как это можно реализовать без меню, ведь для доступа к нему требуются дополнительные нажатия переключателя, что влияет на геймплей. Есть другой подход. Вы можете отобразить кнопку меню, которая явно помечена как недоступная (isAccessibilityElement = NO). Эта кнопка не будет отображаться в порядке сканирования, но пользователи Switch Control по-прежнему могут нажимать ее, сканируя точки с помощью «скользящего курсора» вместо сканирования предметов. Как обычно, я бы не рекомендовал делать что-то нестандартное, если вы не уверены в способностях своих пользователей.

person Justin    schedule 05.08.2015
comment
Ах да, конечно — человек, использующий, например, листовой переключатель, никогда не сможет зарегистрировать долгое нажатие, как глупо с моей стороны. Если кто-то играет в мою игру с одним переключателем, переключатель будет настроен на регистрацию как простое нажатие без меню, поэтому я не смогу использовать настраиваемое действие, как вы предложили. Есть ли другой способ, которым я могу предложить пользователю возможность вернуться в главное меню во время игры? Спасибо большое за вашу помощь. - person arhkfp; 06.08.2015
comment
@kfp_arh Я внес изменения, чтобы включить альтернативный подход. - person Justin; 07.08.2015
comment
Большое спасибо за ваши советы и вклад, я поиграю с некоторыми вещами и поищу отзывы от моих пользователей. - person arhkfp; 07.08.2015