Volver al menu principal al pulsar prolongadamente el button de acceso del interruptor

Estoy creando un juego específicamente diseñado para reproducirse usando el acceso de Switch . El juego crea una grilla de botones dinámicamente basada en el nivel para imitar el layout de la cuadrícula de los íconos de un iPad. Con la naturaleza del acceso de interruptor no puedo tener un button de retroceso para volver al menu principal, ya que esto se contabilizará dentro del juego como un button y se includeá en la tabulación a través del usuario.

Idealmente, quisiera que el usuario pueda volver al menu principal pulsando una vez los botones del interruptor, he intentado adjuntar un reconocimiento de gesto de pulsación larga en la vista a la que se dibujaron los botones, esto funcionó bien en el simulador, pero no con el button de acceso al interruptor, luego intenté conectarlo a cada button, nuevamente funcionó en el simulador pero no en las testings reales.

Aquí está el código que estoy usando que funciona en el simulador.

Agregando UILongPressGestureRecognizer al button.

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

Método llamado longpress.

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

Por lo que entiendo, los controles de acceso al conmutador funcionan igual que un keyboard bluetooth (que es lo que estoy probando en este momento). Al configurar los botones de acceso al interruptor, asigno cada uno a una determinada tecla del keyboard.

¿Alguien sabe cómo puedo hacer que esto funcione? Había considerado deshabilitar un button mientras el juego estaba en juego y volviéndolo a habilitar entre niveles, pero entonces el usuario no tiene la opción de devolver el menu principal a mitad del juego si lo desean, lo que creo que sería un mal layout.

Gracias por cualquier ayuda.

En el modo de escaneo, Switch Control secuencialmente enfoca los elementos. Al seleccionar un elemento con un interruptor, la prensa lo activa. Sin embargo, varias configuraciones de usuario gobiernan la velocidad y los criterios de selección. Su aplicación solo puede responder a los events de accesibilidad y UI; no hay nada que pueda o, en la mayoría de los casos, deba hacer para inferir los comportamientos que generaron estos events.

Agregar una acción personalizada

Si desea ofrecer una acción única para los usuarios de tecnologías de asistencia, implementar -accessibilityCustomActions . Esto permite a los usuarios elegir entre un set de acciones definidas por la aplicación además de la acción de activación estándar del sistema.

Código

Por ejemplo, para exponer y responder a una acción personalizada foo en una UIView contrario UIView , se puede implementar:

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

Salida

Al ejecutar el código anterior con el interruptor de control habilitado, verá un elemento del menu para la nueva acción:

Una vista gris vacía destacada por el cursor azul de Switch Control. Un menú es visible con las opciones "Toque" y "FooAction"

Editar:

En los comentarios, se pregunta cómo podría implementarse esto sin un menu, ya que requiere un cambio adicional para acceder, lo que afecta el juego. Hay otro enfoque Puede mostrar un button de menu que está explícitamente marcado como no accesible ( isAccessibilityElement = NO ). Este button no estará en el order de escaneo, pero los usuarios de Switch Control todavía pueden tocarlo escaneando puntos con el "Cursor deslizante" en lugar del escaneo de elementos. Como de costumbre, me desanimo de hacer algo no estándar como ese a less que estés absolutamente seguro de las habilidades de tus usuarios.