【问题标题】:Firing touchesBegan on a MKMapView with VoiceOver enabled在启用 VoiceOver 的 MKMapView 上触发 touchesBegan
【发布时间】:2011-05-12 09:37:59
【问题描述】:

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

该应用会显示美国的MKMapView,当您点击它的任意位置时,它会使用MKReverseGeocoder 向您显示您点击的位置、州和国家/地区。这很好用,尽管我必须通过将WildcardGestureRecognizer 添加到MKMapView 来劫持触摸事件。这在关闭 VoiceOver 时效果很好。

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

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

【问题讨论】:

    标签: cocoa-touch ios4 accessibility voiceover


    【解决方案1】:

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

    mapView.accessibilityTraits |= UIAccessibilityTraitAllowsDirectInteraction;
    

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多