2013-04-30 29 views
3

我在嵌入UISCrollView控件(使用Xamarin.iOS單聲道綁定的Google Maps iOS SDK)中的視圖上有Google MapView控件。Google MapView控件不會「吞下」手勢,導致包含scrollview消耗它們

問題是,控件不會「吞下」滑動手勢。因此,當用戶在地圖上滑動時,滑動也由包含滾動視圖處理。這是一個真正的「show stopper」,並使得MapView控件對我無法使用。

我試着從MapView派生一個類,並覆蓋方法GestureRecognizerShouldBegin和TouchesBegan,但他們永遠不會被調用。

這似乎是一個與GMSMapView中控制自身相關的問題時,不與Xamarin結合: https://code.google.com/p/gmaps-api-issues/issues/detail?id=5311

我怎樣才能防止UIScrollView的自收到被上的MapView控制作出/處理的手勢?

回答

0

你會發現如何避免事件傳播here

希望這有助於

亞歷

0

您可以通過編寫一個UIGestureRecognizer子類,吃觸摸任何連續的手勢,然後加入繞過它通過其gestureRecognizers屬性將該識別器添加到GMSMapView。

谷歌在他們的SDK中沒有使用手勢識別器,所以現在這不會干擾地圖,儘管未來的更新可能會改變這一點。我不知道如何在MonoTouch中定義自定義識別器,但它似乎是可能的(http://docs.xamarin.com/samples/Touch)。

該手勢識別需要實現這樣的觸摸處理方法的東西:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.state = UIGestureRecognizerStateBegan; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.state = UIGestureRecognizerStateChanged; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.state = UIGestureRecognizerStateEnded; 
} 

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    self.state = UIGestureRecognizerStateCancelled; 
} 

這將導致地圖吃它的任何觸動,像MKMapKit,停止任何滾動意見進一步向上層次遁逃。恐怕我不知道C#/ Xamarin.iOS等效代碼,希望這是有用的。

+0

看起來像谷歌已經修復了地圖未能在[版本1.3.0](https://developers.google.com/maps/documentation/ios/releases#version_130_-_may_2013)中使用觸摸的問題 – Heliotron 2013-05-16 13:11:52

+0

也許不是。他們在默認情況下將UIPanGestureRecognizer附加到了地圖上,但如果用戶有多個手指向下並開始旋轉/傾斜,則可能會失敗。雖然它比1.2.0好很多。 – Heliotron 2013-05-17 09:16:44

1

隨着谷歌地圖SDK的電流(1.3.0)的版本,您可以訪問以下設置:

self.mapView.settings.scrollGestures = NO; 
self.mapView.settings.zoomGestures = NO; 
self.mapView.settings.tiltGestures = NO; 
0

該職位的未來讀者參考,以下兩方面的改進是在做進一步谷歌地圖的版本SDK下解決問題的一部分IOS:

1,版本1.3.0 - 2013年5月:倒是由GMSMapView中消耗,使物體內使用,如滾動視圖

2,版本1.3。 1 - 2013年6月:觸感消耗更多通過GMSMapView

相關問題