2010-11-19 7 views
0

自分自身にアクセシビリティと個人的な挑戦を与える練習として、私は比較的単純なアプリを書くことにしました。VoiceOverを有効にしたMKMapViewでtouchesBeganを起動する

米国のMKMapViewが表示され、その場所をタップするとMKReverseGeocoderが表示され、タップした地域、州、国が表示されます。これは正常に動作しますが、MKMapViewWildcardGestureRecognizerを追加してタッチイベントをハイジャックする必要があります。これは、VoiceOverがオフの場合に効果的です。

VoiceOverをオンにして地図をタップすると、「地図」と表示されます。私がダブルタップすると、それはあなたがそれを起動したことを示す小さなかわいいノイズになります。正直言って、私はこれらの出来事を傍受する方法を失っています。私は一般的な解決策は、画面全体の上に透明なビューを置き、タッチダウンを渡すことですが、VoiceOverで動作するのでしょうか?レコードの

、私が使用しているWildcardGestureRecognizerはここに発見された: How to intercept touches events on a MKMapView or UIWebView objects?

答えて

2

問題は、あなたがVoiceOverをオンにしたときに、タッチイベントがシステムによってブロックされていることです。これを証明するには、touchesBegan関数にトレースを入れます。 VoiceOverをオンにするまで、それは正常に起動するはずです。

ダブルタップしたときに聞こえる小さなクリック音は、VoiceOverオーバーライドジェスチャーです。 VoiceOverには独自のジェスチャーがありますが、ダブルタップでVoiceOverのジェスチャーをオーバーライドできます。

たとえば、スワイプダウンするとVoiceOverがオンのページはスクロールされません。しかし、ダブルタップして、かっこの音を待ってからスワイプすると、スクロールします。

2

のiOS 5.0は、この機能を追加 - ちょうどビューにUIAccessibilityTraitAllowsDirectInteraction特性設定:

(これが動作しない場合は、かわりにマップビューをサブクラス化しaccessibilityTraitsメソッドをオーバーライドする必要があるかもしれません)

mapView.accessibilityTraits |= UIAccessibilityTraitAllowsDirectInteraction; 

その要素の最初のタッチでも、「クリック」音が鳴り、ビューの名前などがアナウンスされますが、その後のすべてのタッチは直接のやりとりになります。つまり、タッチイベントはマップビューに渡されます。

AppleのiOSアプリケーションで使用されているこの例は、GarageBandです。ピアノの視点では、この特性が設定されているため、ブラインドの人は直接ピアノのキーボードに触れることができます。

関連する問題