2010-11-19 15 views
0

作爲一項對自己的可訪問性和個人挑戰的練習,我決定編寫一個相對簡單的應用程序。在啓用VoiceOver的MKMapView上觸發觸發開始

該應用程序會顯示美國的MKMapView,當您點擊任何地方時,它會使用MKReverseGeocoder向您顯示您點擊的地點,州和國家。這工作正常,但我必須通過在MKMapView上添加WildcardGestureRecognizer來劫持觸摸事件。這很適用於關閉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特點:

mapView.accessibilityTraits |= UIAccessibilityTraitAllowsDirectInteraction; 

(如果不工作,你可能反而需要繼承地圖視圖和重寫accessibilityTraits方法)

對該元素的第一次觸摸仍然會發出「咔噠」聲,並宣佈視圖的名稱等,但所有後續觸摸都將是直接交互 - 即觸摸事件將傳遞給地圖視圖。

在蘋果的iOS應用程序中使用此功能的示例是GarageBand - 鋼琴視圖具有此特性,因此盲人可以通過直接觸摸鋼琴鍵盤來彈奏琴鍵。