4

我试图在谷歌 GMSMapView 上覆盖 UIView。目标是拦截滑动,以便了解何时手动移动地图。(我知道我可以检查 -mapView:willMove: 但无论地图是以编程方式移动还是手动触摸的结果都会被调用)。随着位置的更新,我以编程方式重新居中地图——因为谷歌不像苹果那样为你做这件事。就像那里的每个地图程序一样,一旦用户手动移动地图,我想停止以当前位置为中心。我能想到的捕捉这种情况的唯一方法(没有切换到 mapkit 或等待 Google 添加到 API)是捕捉经过地图上视图的滑动。

为了澄清,我的问题是如何在谷歌地图上放置视图,使其响应滑动并仍然允许该事件传递到 GMSMapView?

我的 map 和 interceptView 都是主视图的兄弟姐妹。interceptView 有一个gestureRecognizer,设置为不透明,不隐藏并且userInteractionEnabled = YES。因此,interceptView 可以很好地接收触摸事件。但是下面的地图不动。如果我设置interceptView.userInteractionEnabled = NO,地图工作正常。

通过覆盖 touchesBegan 并调用 GMSMapView 的 touchesBegan 来“传递触摸”不会做任何事情。并且覆盖 hitTest 似乎不是一个选项,因为我不能继承 GMSMapView。有人做过吗?我知道这里有很多关于传递特定事件的内容。我想在两个视图上处理一个特定事件,其中一个是我无法修改代码的谷歌地图层。

4

3 回答 3

4

mapView:willMove: 接收一个布尔“手势”,如果移动是由用户手势触发的,则为 true,否则为 false。因此,仅当“手势”为真时,您才能停止重新居中地图。这样您就可以确定地图是手动移动的。

于 2013-12-02T23:48:56.073 回答
1

这是一个委托方法检查它

- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate;
于 2015-07-13T12:19:37.780 回答
0

您可以使用 GMSMapViewDelegete 拦截点击并实现此方法:

-(void)panoramaView:(GMSPanoramaView *)panoramaView didTap:(CGPoint)point;

例子:

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    CLLocationCoordinate2D panoramaNear = {latitudine,longitudine};
    GMSPanoramaView *panoView = [GMSPanoramaView panoramaWithFrame:CGRectZero
                                    nearCoordinate:panoramaNear];
    [panoView setDelegate:self];
    self.view = panoView;
}
-(void)panoramaView:(GMSPanoramaView *)panoramaView didTap:(CGPoint)point{
NSLog(@"Tap");
}
于 2014-03-15T14:44:13.897 回答