长按Switch Switch按钮返回主菜单

时间:2015-08-05 08:26:21

标签: ios objective-c ipad uiaccessibility switchcontrol

我正在创建一个专门设计为使用Switch access播放的游戏。游戏根据级别动态构建按钮网格,以模仿iPad图标的网格布局。由于交换机访问的性质,我不能有一个后退按钮返回到主菜单,因为这将作为一个按钮计入游戏内,并通过用户将包含在标签中。

理想情况下,我希望用户能够长按其中一个开关按钮返回主菜单,我已经尝试将长按手势识别器附加到按钮被拉到的视图上,这是有效的在模拟器中很好但没有按下开关访问按钮,然后我尝试将它连接到每个按钮,这再次在模拟器中工作但在实际测试中没有。

以下是我在模拟器中使用的代码。

将UILongPressGestureRecognizer添加到按钮。

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

在longpress上调用的方法。

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

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

有谁知道我怎么能让这个工作?我曾经考虑过在游戏进行时禁用按钮并在各级之间重新启用它,但是如果用户没有选择在游戏中间返回主菜单,我觉得这样做会很糟糕。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在扫描模式下,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的情况下运行上面的代码,您会看到新操作的菜单项:

An empty, grey view highlighted by the blue cursor of Switch Control. A menu is visible with the options "Tap" and "FooAction"

修改

在评论中,你会问如何在没有菜单的情况下实现这一点,因为它需要额外的开关按键来访问,这会影响游戏玩法。还有另一种方法。您可以显示明确标记为可访问的菜单按钮(isAccessibilityElement = NO)。此按钮不在扫描顺序中,但是Switch Control用户仍然可以通过点扫描使用&#34;滑动光标&#34;而不是项目扫描。像往常一样,除非你绝对肯定你的用户,否则我会劝阻做一些非标准的事情。能力。