如何在ios中覆盖VoiceOver手势?

时间:2017-01-13 23:53:18

标签: ios objective-c uigesturerecognizer voiceover

我正在开发一个包含地图的盲人应用程序。当VoiceOver关闭时,我可以使用UIGestureRecognizer检测滑动和双击手势。例如:

UISwipeGestureRecognizer * swipeLeft=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeLeft:)];
swipeLeft.direction=UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeLeft];

然而,当VoiceOver打开时,我无法覆盖我拥有的VoiceOver手势。我知道UIAccessibilityTraits允许直接交互的可能性:

[mySubView setAccessibilityTraits: UIAccessibilityTraitAllowsDirectInteraction];

问题在于,由于我有地图,当我允许直接交互时,我开始与地图交互(平移,缩放等)。但是,我的目标是保持地图不变,但通过GestureRecognizers检测手势并执行与其关联的操作。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

VoiceOver的直接交互模型支持手势识别器。您所观察到的是与地图手势处理的冲突。鉴于地图视图的复杂性及其触摸处理,我鼓励采用两种替代方法中的一种。在这两种情况下,您可能都希望在地图视图顶部覆盖透明的UIView。 将任何手势识别器附加到此自定义视图。用户可以通过直接交互触发快捷方式。您可能希望在运行VoiceOver时对此进行调节。 完全支持直接交互,并在地图或叠加视图上将快捷方式实现为自定义操作。这可能会使其他辅助功能的用户受益,而不仅仅是VoiceOver。

答案 1 :(得分:0)

是的,我解决了此问题,附加了一个子视图,并设置了“ .isAccessibilityElement = true”和“ .accessibilityTraits = .allowsDirectInteraction”,并将所有手势和覆盖的触摸方法引用到添加的视图中。