Adding Click Event on InfoWindow/Marker in Google Maps SDK for native iOS/objective C

后端 未结 7 2081
无人及你
无人及你 2020-12-05 05:41

Simple Question

I´m working on an App for iOS where I embedded the new Google Map for native iOS. Everything works fine except one problem where I can´t find a propp

相关标签:
7条回答
  • 2020-12-05 06:12

    I am using Google Maps SDK for iOS.

    I have subclassed uiview to create a custom view "InfoWindow" for infowindow.

    add @property (nonatomic,retain) UIView *actionOverlayCalloutView; in your viewcontroller's header file.

    - (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];
        }
    }
    }
    
    0 讨论(0)
提交回复
热议问题