3

我在嵌入 UISCrollView 控件(使用 Xamarin.iOS 单声道绑定的 Google Maps iOS SDK)中的视图上有一个 Google MapView 控件。

问题是控件不会“吞下”滑动手势。因此,当用户在地图上滑动时,滑动也由包含的滚动视图处理。这是一个真正的“显示停止器”,使 MapView 控件对我无法使用。

我尝试从 MapView 派生一个类并覆盖 GestureRecognizerShouldBegin 和 TouchesBegan 方法,但它们从未被调用。

这似乎是与 GMSMapView 控件本身相关的问题,而不是与 Xamarin 绑定有关: https ://code.google.com/p/gmaps-api-issues/issues/detail?id=5311

如何防止 UISCrollView 接收/处理 MapView 控件上的手势?

4

4 回答 4

1

使用当前 (1.3.0) 版本的 Google Maps SDK,您可以访问以下设置:

self.mapView.settings.scrollGestures = NO;
self.mapView.settings.zoomGestures = NO;
self.mapView.settings.tiltGestures = NO;
于 2013-05-28T17:31:39.337 回答
0

为了供该帖子的未来读者参考,在已解决问题部分的 google maps sdk for ios 的进一步版本中进行了以下两项改进:

1,版本 1.3.0 - 2013 年 5 月:GMSMapView 使用触摸,允许在滚动视图等对象中使用

2,版本 1.3.1 - 2013 年 6 月:GMSMapView 更积极地消耗触摸

于 2013-07-27T11:11:48.177 回答
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 等效代码,希望这很有用。

于 2013-05-13T14:12:25.767 回答
0

您可能会在此处找到如何避免事件传播

希望这可以帮助

亚历克斯

于 2013-04-30T15:07:40.837 回答