Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Google MapView控件不支持;“吞咽”;手势,导致包含滚动视图的用户使用这些手势_Ios_Xamarin.ios_Google Maps Sdk Ios - Fatal编程技术网

Ios Google MapView控件不支持;“吞咽”;手势,导致包含滚动视图的用户使用这些手势

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控件的视图上有一个Google MapView控件(使用Xamarin.iOS mono绑定的Google Maps iOS SDK)

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

我尝试从MapView派生一个类,并重写GestureRecognitzerShouldBegin和TouchesBegind方法,但它们从未被调用

这似乎是一个与GMSMapView控件本身有关的问题,而不是与Xamarin绑定有关:


如何防止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版本要好得多。