2014-10-29 46 views
0

我正在構建的應用程序有一個全屏幕MKMapView,其他UIView子類放在它上面,全屏以及完全透明。我希望UIView子類能夠處理單點觸摸手勢,例如點擊和單指拖動,並忽略其他任何操作。這將允許MKMapView使用其他方式進行交互,尤其是通過禁用3D功能使用兩根手指進行平移/滾動。iOS - 過濾和轉發子視圖

我在這裏的問題是,的MKMapView不使用touchesXXX:withEvent:方法的用戶交互。因此,我無法在視圖上的這些方法中檢測觸摸計數並轉發到地圖。同樣,hitTest:withEvent:方法不能用於確定哪個視圖處理觸摸,因爲那裏的UIEvent對象返回一組空的觸摸。

我已經考慮讓所有通過視圖觸摸前進,並用手勢識別來處理事件,但我真的需要在覆蓋視圖中的單點觸摸/拖拽到對地圖視圖沒有影響。

有沒有辦法來完成基於觸摸個數這個過濾?或者在地圖視圖中禁用單點觸摸手勢的方法?

+0

請問如果附加單個手指點擊並拖動到識別的MapView自身工作的呢? – Linuxios 2014-10-29 18:50:15

+0

因此,通過替換它們,基本上覆蓋/取消地圖視圖上的現有手勢? – bgoers 2014-10-29 18:52:09

+0

是的。一秒鐘,我在Xcode中查看。 – Linuxios 2014-10-29 18:55:20

回答

1

對此的解決方案其實很簡單。

  • 給所述地圖視圖的父視圖,它完全充滿
  • 給父視圖平移和點擊配置爲只以一個手指響應手勢識別觸摸
  • MKMapView,將scrollEnabled屬性設置爲NO (以下簡稱「允許滾動」複選框IB)

的手勢識別器讓你得到的手勢,並設置scrollEnabledNO阻止的MapView吞食與p一個手勢。

示例項目位置:https://github.com/Linux-cpp-lisp/sample-no-gesture-mapview

+0

非常好。我喜歡它,它非常接近。這只是引入了一個問題 - 當您禁用地圖的3D功能時,雙指手勢允許地圖視圖滾動,這正是我期望做的(我想我應該指定我道歉) 。現在不幸的是,禁用滾動來吞嚥單點觸摸手勢不允許雙指盤滾動:( – bgoers 2014-10-29 19:17:59

+0

我目前正在測試一堆沿這些線來想出一些狀態,允許使用手勢功能。 – bgoers 2014-10-29 19:21:44

+0

@bgoers:好的,你可以嘗試的一件事就是通過捕捉兩個手指盤並計算偏移量來滾動自己,不太確定該怎麼做,雖然 – Linuxios 2014-10-29 19:26:21