我在嵌入UISCrollView控件的视图中有一个Google MapView控件(使用Xamarin.iOS单声道绑定的Google Maps iOS SDK)。
问题是控件没有“吞下”滑动手势。因此,当用户在地图上滑动时,滑动也由包含滚动视图处理。这是一个真正的“显示停止”并使MapView控件无法使用。
我尝试从MapView派生一个类并重写方法GestureRecognizerShouldBegin和TouchesBegan,但它们永远不会被调用。
这似乎是一个与GMSMapView控件本身有关的问题,而不是与Xamarin绑定有关: https://code.google.com/p/gmaps-api-issues/issues/detail?id=5311
如何阻止UISCrollView接收/处理在MapView控件上进行的手势?
答案 0 :(得分:1)
使用当前(1.3.0)版本的Google Maps SDK,您可以访问以下设置:
self.mapView.settings.scrollGestures = NO;
self.mapView.settings.zoomGestures = NO;
self.mapView.settings.tiltGestures = NO;
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以通过编写UIGestureRecognizer子类来解决这个问题,该子类可以处理任何连续手势的触摸,然后通过其gestureRecognizers属性将该识别器添加到GMSMapView。
Google不在其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等效代码,希望这很有用。
答案 3 :(得分:0)
对于该帖子的未来读者的参考,在解决的问题部分的以下两个改进是针对ios的谷歌地图sdk的进一步发布:
1,版本1.3.0 - 2013年5月:GMSMapView使用触摸,允许在滚动视图等对象中使用
2,版本1.3.1 - 2013年6月:GMSMapView
更加积极地消耗了触摸