0

アクセシビリティに関する演習と自分自身への個人的な課題として、比較的単純なアプリを作成することにしました。

アプリ MKMapViewには米国の が表示され、その上をタップすると、 を使用して、タップし MKReverseGeocoderた地域、州、国が表示されます。WildcardGestureRecognizerに aを 追加してタッチイベントをハイジャックする必要がありますが、これは正常に機能 しMKMapViewます。これは、 VoiceOverオフにするとうまく機能します。

電源を入れ VoiceOverて地図をタップすると、「地図」と表示されます。ダブルタップすると、クリック音が小さくなり、アクティブになったことを示します。正直なところ、これらのイベントを傍受する方法に途方に暮れています。一般的な解決策は、画面全体の上に透明なビューを配置してタッチを渡すことであることは知っていますが、それはうまくいき VoiceOverますか?

記録のために、 WildcardGestureRecognizer私が使用しているのはここにあります: MKMapView または UIWebView オブジェクトのタッチ イベントをインターセプトする方法は?

4

2 に答える 2

4

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

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

たとえば、下にスワイプしても、VoiceOverがオンになっているページはスクロールされません。ただし、ダブルタップしたまま、カチッという音がするのを待ってから下にスワイプすると、スクロールします。

于 2011-02-10T22:53:33.353 に答える
2

iOS 5.0 でこの機能が追加されました。ビューにUIAccessibilityTraitallowsDirectInteractionトレイトを設定するだけです。

mapView.accessibilityTraits |= UIAccessibilityTraitAllowsDirectInteraction;

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

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

Apple の iOS アプリの 1 つで使用されている例として、GarageBand があります。ピアノ ビューにはこの特性が設定されているため、目の不自由な人がピアノの鍵盤に直接触れることで鍵盤を演奏できます。

于 2013-03-10T16:27:00.330 に答える