我正在创建一个专门设计为使用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];
}
}
根据我的理解,交换机访问控制就像蓝牙键盘一样工作(这就是我目前的测试方式)。设置开关访问按钮时,我将每个按钮映射到某个键盘键。
有谁知道我怎么能让这个工作?我曾经考虑过在游戏进行时禁用按钮并在各级之间重新启用它,但是如果用户没有选择在游戏中间返回主菜单,我觉得这样做会很糟糕。
感谢您的帮助。
答案 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的情况下运行上面的代码,您会看到新操作的菜单项:
修改强>
在评论中,你会问如何在没有菜单的情况下实现这一点,因为它需要额外的开关按键来访问,这会影响游戏玩法。还有另一种方法。您可以显示明确标记为不可访问的菜单按钮(isAccessibilityElement = NO
)。此按钮不在扫描顺序中,但是Switch Control用户仍然可以通过点扫描使用&#34;滑动光标&#34;而不是项目扫描。像往常一样,除非你绝对肯定你的用户,否则我会劝阻做一些非标准的事情。能力。