3

我正在创建一个专门设计用于使用Switch access玩的游戏。游戏根据关卡动态构建按钮网格,以模仿 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];       
       }
 }  

据我了解,开关访问控制就像蓝牙键盘一样工作(这是我目前正在测试的方式)。在设置开关访问按钮时,我将每个按钮映射到某个键盘键。

有谁知道我怎样才能让这个工作?我曾考虑在游戏进行时禁用按钮并在关卡之间重新启用它,但如果用户愿意,他们无法选择返回主菜单中间游戏,我觉得这将是糟糕的设计。

谢谢你的帮助。

4

1 回答 1

2

在扫描模式下,开关控制顺序聚焦元素。使用开关按下选择一个元素会激活它。但是,各种用户设置控制速度和选择标准。您的应用程序只能响应 UI 和可访问性事件——您无法或在大多数情况下不应该做任何事情来推断生成这些事件的行为。

添加自定义操作

如果您想为辅助技术用户提供独特的操作,请实施-accessibilityCustomActions. 除了系统标准的激活操作外,这还允许用户从一组应用程序定义的操作中进行选择。

代码

例如,要公开和响应foo在其他 bare 上的自定义操作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 的蓝色光标突出显示的空灰色视图。 带有选项的菜单可见

编辑:

在评论中,您询问如何在没有菜单的情况下实现这一点,因为它需要额外按下开关才能访问,这会影响游戏玩法。还有另一种方法。您可以显示明确标记为不可访问 ( isAccessibilityElement = NO) 的菜单按钮。此按钮将不在扫描顺序中,但切换控制用户仍然可以使用“滑动光标”进行点扫描而不是项目扫描。像往常一样,除非您完全确定用户的能力,否则我不鼓励做这样的非标准事情。

于 2015-08-05T16:25:55.237 回答