简单的问题
我正在开发一个适用于 iOS 的应用程序,我在其中嵌入了适用于原生 iOS 的新 Google 地图。一切都很好,除了一个问题,我在这里和谷歌都找不到本地 IOS/Objective-C 的合适解决方案(如果有,请告诉我,抱歉打扰你)
我想要什么:我希望用户单击打开信息窗口的标记。如果他单击或点击信息窗口后,它应该打开一个带有更多信息的新 UIView。
我怎样才能做到这一点?
感谢您的建议
简单的问题
我正在开发一个适用于 iOS 的应用程序,我在其中嵌入了适用于原生 iOS 的新 Google 地图。一切都很好,除了一个问题,我在这里和谷歌都找不到本地 IOS/Objective-C 的合适解决方案(如果有,请告诉我,抱歉打扰你)
我想要什么:我希望用户单击打开信息窗口的标记。如果他单击或点击信息窗口后,它应该打开一个带有更多信息的新 UIView。
我怎样才能做到这一点?
感谢您的建议
1.符合GMSMapViewDelegate协议。
@interface YourViewController () <GMSMapViewDelegate>
// your properties
@end
2.设置你的mapView_代表。
mapView_.delegate = self;
3.实现GMSMapViewDelegate方法
- (void)mapView:(GMSMapView *)mapView didTapInfoWindowOfMarker:(GMSMarker *)marker {
    // your code
}
顺便说一句,marker.userData很有用。您可以将所需的数据设置到其中并在其中使用- mapView:didTapInfoWindowOfMarker:
在哪里添加地图,添加
 mapView_.delegate=self; 
然后用这个
-(void)mapView:(GMSMapView *)mapView
didTapInfoWindowOfMarker:(id<GMSMarker>)marker{
   //info window tapped
}
swift 4的完整答案
添加GMSMapViewDelegate为代表
像这样设置你的地图委托:  googlemap.delegate = self
添加这个函数
func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool { // do something return true }
您可以使用GMSMapViewDelegate:
mapView.delegate = self
func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
        print("InfoView tapped")
}
我正在使用适用于 iOS 的 Google Maps SDK。
我将 uiview 子类化为 infowindow 创建自定义视图“InfoWindow”。
添加@property (nonatomic,retain) UIView *actionOverlayCalloutView; 在您的视图控制器的头文件中。
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker {
if(self.objSelectedParking != nil)
{
    float anchorSize = 0.5f;
    float infoWindowWidth = 250.0f;
    float infoWindowHeight = 250.0f;
    [self.actionOverlayCalloutView removeFromSuperview];
    InfoWindow *infoWindow = [[InfoWindow alloc] initWithFrame:CGRectMake(0, 0, infoWindowWidth, infoWindowHeight)];
    infoWindow.lblTitle.text = self.objSelectedParking.strParkingName;
    infoWindow.lblDescription.text = self.objSelectedParking.strParkingDescription;
    infoWindow.lblAddress.text = self.objSelectedParking.strParkingAddress;
    infoWindow.lblPhone.text = self.objSelectedParking.strParkingPhone;
    infoWindow.imageViewParking.image = [UIImage imageNamed:@"parking_image_sample.jpg"];
    float offset = anchorSize * M_SQRT2;
    self.actionOverlayCalloutView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, infoWindowWidth, infoWindowHeight - offset/2)];
    [self.actionOverlayCalloutView setBackgroundColor:[UIColor clearColor]];
    self.actionOverlayCalloutView.layer.cornerRadius = 5;
    self.actionOverlayCalloutView.layer.masksToBounds = YES;
    UIButton *hiddenCloseButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.viewContainer.frame.origin.x + infoWindow.viewContainer.frame.size.width - 30), 10, 20, 20)];
    [hiddenCloseButton addTarget:self action:@selector(hiddenCloseButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside];
    [self.actionOverlayCalloutView addSubview:hiddenCloseButton];
    UIButton *hiddenDirectionButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.lblAddress.frame.origin.x + infoWindow.lblAddress.frame.size.width + 5), (infoWindow.lblAddress.frame.origin.y - 15), 25, 25)];
    [hiddenDirectionButton addTarget:self action:@selector(hiddenDirectionButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside];
    [self.actionOverlayCalloutView addSubview:hiddenDirectionButton];
    UIButton *hiddenInfoButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.innerContainerView.frame.origin.x + infoWindow.imageViewParking.frame.origin.x + infoWindow.imageViewParking.frame.size.width + 20), (infoWindow.innerContainerView.frame.origin.y + 25), 25, 25)];
    [hiddenInfoButton addTarget:self action:@selector(hiddenInfoButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside];
    [self.actionOverlayCalloutView addSubview:hiddenInfoButton];
    UIButton *hiddenScheduleButton = [[UIButton alloc] initWithFrame:CGRectMake((infoWindow.innerContainerView.frame.origin.x + infoWindow.verticalLineSeperatorView.frame.origin.x + infoWindow.verticalLineSeperatorView.frame.size.width + 10), (infoWindow.innerContainerView.frame.origin.y + 25), 25, 25)];
    [hiddenScheduleButton addTarget:self action:@selector(hiddenScheduleButtonClickedInInfowindow:) forControlEvents:UIControlEventTouchUpInside];
    [self.actionOverlayCalloutView addSubview:hiddenScheduleButton];
    [infoWindow addSubview:self.actionOverlayCalloutView];
    CLLocationCoordinate2D anchor = [_mapView.selectedMarker position];
    CGPoint point = [_mapView.projection pointForCoordinate:anchor];
    point.y -= _mapView.selectedMarker.icon.size.height + offset/2 + (infoWindowHeight - offset/2)/2;
    self.actionOverlayCalloutView.center = point;
    [_mapView addSubview:self.actionOverlayCalloutView];
    return infoWindow;
}
return nil;
}
-(void)mapView:(GMSMapView *)pMapView didChangeCameraPosition:(GMSCameraPosition *)position {
if (pMapView.selectedMarker != nil && self.actionOverlayCalloutView.superview)
{
    float anchorSize = 0.5f;
    float infoWindowHeight = 250.0f;
    CLLocationCoordinate2D anchor = [_mapView.selectedMarker position];
    CGPoint point = [_mapView.projection pointForCoordinate:anchor];
    float offset = anchorSize * M_SQRT2;
    point.y -= _mapView.selectedMarker.icon.size.height + offset/2 + (infoWindowHeight - offset/2)/2;
    point.y = point.y - 10; //PRATIK GUJARATI CODE TO ADJUST HEIGHT AND Y VALUE OF TRANSPARENT OVERLAY VIEW
    self.actionOverlayCalloutView.center = point;
} else {
    [self.actionOverlayCalloutView removeFromSuperview];
}
}
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
[self.actionOverlayCalloutView removeFromSuperview];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"mapView.selectedMarker"]) {
    if (!_mapView.selectedMarker) {
        [self.actionOverlayCalloutView removeFromSuperview];
    }
}
}
创建一个要在 infoWindow 中显示的子视图。
设置子视图的框架等于 infoWindow 视图的框架。
subView = [[[NSBundle mainBundle] loadNibNamed:@"viewName" owner:self options:nil] objectAtIndex:0]; 
[subView setFrame:infoview.frame]; 
[self.mapview addSubview:subView];
在谷歌地图查看信息获取信息
    func mapView(_ mapView: GMSMapView, didTapInfoWindowOf marker: GMSMarker) {
    print(marker.title!)
    print(marker.snippet!)
}