我正在尝试通过适用于 iOS 的 Google Maps API 显示来自 Google Maps 的自定义叠加视图。此覆盖视图标记的内容信息和两个我的按钮。但我找不到任何参考资料。我想要的叠加视图如下图所示:
http://i1121.photobucket.com/albums/l515/dungnlh_khtn07/NguoiMoCay/overlayinfoview_zps8110b7ed.jpg
请给我一个指导!
我正在尝试通过适用于 iOS 的 Google Maps API 显示来自 Google Maps 的自定义叠加视图。此覆盖视图标记的内容信息和两个我的按钮。但我找不到任何参考资料。我想要的叠加视图如下图所示:
http://i1121.photobucket.com/albums/l515/dungnlh_khtn07/NguoiMoCay/overlayinfoview_zps8110b7ed.jpg
请给我一个指导!
可能,正如 Google Maps Android API 文档中正式提到的,以下有关 infowindows 的限制也适用于 Google Maps iOs SDK:
信息窗口不是实时视图,而是将视图呈现为地图上的图像。因此,您在视图上设置的任何侦听器都将被忽略,并且您无法区分视图各个部分的点击事件。建议您不要在自定义信息窗口中放置交互式组件(例如按钮、复选框或文本输入)。
所以基本上点击信息窗口的任何部分只会触发“didTapWindowOfMarker”
实现这一点的最佳方法是通过 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
*/
好的,但是有人可以澄清一下如何在那个 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 上,当然,它会响应触摸。我想这是由于一些未设置的帧,但不能完全明白。有人可以澄清一下吗?
当用户点击markerInfoContents时,您可以使用两个按钮显示AlertView或ActionSheet