Ios Google MapView控件不支持;“吞咽”;手势,导致包含滚动视图的用户使用这些手势
我在嵌入UISCrollView控件的视图上有一个Google MapView控件(使用Xamarin.iOS mono绑定的Google Maps iOS SDK) 问题是控件不会“吞咽”滑动手势。因此,当用户在地图上滑动时,滑动也由包含滚动的视图处理。这是一个真正的“显示障碍”,使MapView控件对我来说无法使用 我尝试从MapView派生一个类,并重写GestureRecognitzerShouldBegin和TouchesBegind方法,但它们从未被调用 这似乎是一个与GMSMapView控件本身有关的问题,而不是与Xamarin绑定有关:Ios Google MapView控件不支持;“吞咽”;手势,导致包含滚动视图的用户使用这些手势,ios,xamarin.ios,google-maps-sdk-ios,Ios,Xamarin.ios,Google Maps Sdk Ios,我在嵌入UISCrollView控件的视图上有一个Google MapView控件(使用Xamarin.iOS mono绑定的Google Maps iOS SDK) 问题是控件不会“吞咽”滑动手势。因此,当用户在地图上滑动时,滑动也由包含滚动的视图处理。这是一个真正的“显示障碍”,使MapView控件对我来说无法使用 我尝试从MapView派生一个类,并重写GestureRecognitzerShouldBegin和TouchesBegind方法,但它们从未被调用 这似乎是一个与GMSMapV
如何防止UISCrollView接收/处理MapView控件上的手势?您可能会发现如何避免事件传播 希望这有帮助
Alex您可以编写一个UIGestureRecognizer子类,该子类接受任何连续手势的触碰,然后通过其gestureRecognizers属性将该识别器添加到GMSMapView中,从而绕过该问题 谷歌在其SDK中不使用手势识别器,因此目前这不会干扰地图,尽管未来的更新可能会改变这一点。我不知道如何在MonoTouch中定义自定义识别器,但这似乎是可能的() 此手势识别器需要实现以下触摸处理方法:
- (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等效代码,希望这有用。对于当前(1.3.0)版本的Google Maps SDK,您可以访问以下设置:
self.mapView.settings.scrollGestures = NO;
self.mapView.settings.zoomGestures = NO;
self.mapView.settings.tiltGestures = NO;
为了供以后的读者参考,google maps sdk For ios的后续版本在“已解决问题”部分中做了以下两项改进: 1,版本1.3.0-2013年5月:触摸由GMSMapView使用,允许在滚动视图等对象中使用
2,版本1.3.1-2013年6月:GMSMapView对触摸的消费更大看起来谷歌已经解决了地图无法在2013年消费触摸的问题。默认情况下,他们将UIPangestureRecognitor附加到地图上,但如果用户有多个手指向下并开始大量旋转/倾斜,则此操作可能会失败。不过,这比1.2.0版本要好得多。