0

作为一个具有可访问性的练习和对自己的个人挑战,我决定编写一个相对简单的应用程序。

该应用程序会显示一个 MKMapView美国,当你点击它的任何地方时,它会使用一个 MKReverseGeocoder显示你点击的地方、州和国家。这很好用,尽管我必须通过 WildcardGestureRecognizerMKMapView. VoiceOver这在关闭时效果很好 。

当我打开 VoiceOver并点击地图时,它会显示“地图”。如果我双击它,它会发出一点点咔哒声,这表明你已经激活了它。老实说,我不知道如何拦截这些事件。我知道一般的解决方案是在整个屏幕上方放置一个透明视图并传递触摸,但这适用 VoiceOver吗?

作为记录, WildcardGestureRecognizer我在这里找到了我正在使用的内容: How to intercept touches events on a MKMapView or UIWebView objects?

4

2 回答 2

4

问题是当您打开 VoiceOver 时,系统会阻止触摸事件。为了证明这一点,请在您的 touchesBegan 函数中添加跟踪。在您打开 VoiceOver 之前,它应该可以正常触发。

双击时听到的轻微咔哒声是 VoiceOver 覆盖手势。VoiceOver 有自己的一组手势,但您可以通过双击来覆盖 VoiceOver 的手势。

例如,向下滑动不会滚动打开 VoiceOver 的页面。但是,如果您双击按住,等待咔嗒声然后向下滑动,它将滚动。

于 2011-02-10T22:53:33.353 回答
2

iOS 5.0 添加了这个功能 - 只需在视图上设置UIAccessibilityTraitAllowsDirectInteraction trait:

mapView.accessibilityTraits |= UIAccessibilityTraitAllowsDirectInteraction;

(如果这不起作用,您可能需要子类化地图视图并覆盖accessibilityTraits 方法)

对该元素的第一次触摸仍会发出“点击”声音并宣布视图名称等,但所有后续触摸将是直接交互 - 即触摸事件将传递给地图视图。

在 Apple 的一个 iOS 应用程序中使用的示例是 GarageBand - 钢琴视图具有此特征集,因此盲人可以通过直接触摸钢琴键盘上的琴键来弹奏它们。

于 2013-03-10T16:27:00.330 回答