1

我正在尝试通过适用于 iOS 的 Google Maps API 显示来自 Google Maps 的自定义叠加视图。此覆盖视图标记的内容信息和两个我的按钮。但我找不到任何参考资料。我想要的叠加视图如下图所示:

http://i1121.photobucket.com/albums/l515/dungnlh_khtn07/NguoiMoCay/overlayinfoview_zps8110b7ed.jpg

请给我一个指导!

4

5 回答 5

5

可能,正如 Google Maps Android API 文档中正式提到的,以下有关 infowindows 的限制也适用于 Google Maps iOs SDK:

信息窗口不是实时视图,而是将视图呈现为地图上的图像。因此,您在视图上设置的任何侦听器都将被忽略,并且您无法区分视图各个部分的点击事件。建议您不要在自定义信息窗口中放置交互式组件(例如按钮、复选框或文本输入)。

所以基本上点击信息窗口的任何部分只会触发“didTapWindowOfMarker”

于 2013-03-07T20:34:36.713 回答
2

实现这一点的最佳方法是通过 GMSMapViewDelegate 的mapView:markerInfoWindow:方法为您的信息窗口传递您的 GMSMapView 自定义视图。

为此,请将自己设置为 GMSMapView 实例的委托,如下所示:

self.mapView.delegate = self;

然后在请求时返回自定义 UIView:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(id<GMSMarker>)marker
{
    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    customView.backgroundColor = [UIColor redColor];

    return customView;
}

您可以通过查看 GMSMapView 标头找到更多信息,该标头指出:

/**
 * Called when a marker is about to become selected, and provides an optional
 * custom info window to use for that marker if this method returns a UIView.
 * If you change this view after this method is called, those changes will not
 * necessarily be reflected in the rendered version.
 *
 * The returned UIView must not have bounds greater than 500 points on either
 * dimension.  As there is only one info window shown at any time, the returned
 * view may be reused between other info windows.
 *
 * @return The custom info window for the specified marker, or nil for default
 */
于 2013-02-25T18:48:12.103 回答
2

好的,但是有人可以澄清一下如何在那个 UIView 上获得一个 UIButton 来响应触摸吗?就像 Dung Nguyen Le Hoang 所附图片中的两个按钮。例如,如果我添加这样的按钮:

- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(id<GMSMarker>)marker
{
    UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    customView.backgroundColor = [UIColor redColor];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    [button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
    [button setFrame:CGRectMake(0, 0, 30, 30)];

    [customView addSubview:button];

    return customView;
}

当然还有 buttonPressed

- (void)buttonPressed
{
    NSLog(@"Hello");
}

它没有被调用。如果我将按钮作为子视图添加到 self.mapView,那么它会出现在 mapView 上,而不是 InfoWindow 上,当然,它会响应触摸。我想这是由于一些未设置的帧,但不能完全明白。有人可以澄清一下吗?

于 2013-02-26T08:04:38.877 回答
1
  • (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker
于 2013-10-27T22:14:14.203 回答
0

当用户点击markerInfoContents时,您可以使用两个按钮显示AlertViewActionSheet

于 2017-09-12T17:02:18.357 回答