Custom info window in IOS google maps sdk

2020-02-14 07:57发布

问题:

being a newby IOS developer, I'm really struggling to get something basic to work.

I have a need to display this kind of custom info window upon a marker click in the google maps sdk for ios.

Any help would be appreciated.

I've already seen the third party components, but even with them I cannot get this to display. There is always a title, snippet, left image and right image part. The real question is how do you get the gold star rating in the window, with the text next to it.

回答1:

Make Xib as you want...set Text and image

set delegate GMSMapViewDelegate

-(UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker{

    CustomInfoWindow *infoWindow=[[[NSBundle mainBundle] loadNibNamed:@"InfoWindow" owner:self options:nil] objectAtIndex:0];  
     return infoWindow;

}

https://www.youtube.com/watch?v=ILiBXYscsyY for more help see this video..Uploded by google



回答2:

I was suffering from the same problem of Info window customization in GoogleMapsSdk for iOS for a lot of days, got frustrated & did it my self!

Clean, Completely customizable & Own UIControls with your custom actions code can be found on Github Right here

Happy coding :)



回答3:

ended up using SMCalloutView @ https://github.com/nfarina/calloutview



回答4:

Swift 3.0 Solution

Google Map CustomInfoWindow

//empty the default infowindow
    func mapView(_ mapView: GMSMapView, markerInfoWindow marker: GMSMarker) -> UIView? {
        return UIView()
    }

    // reset custom infowindow whenever marker is tapped
    func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {

        customInfoView.removeFromSuperview()
    //    customInfoView.button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
        self.view.addSubview(customInfoView)

        // Remember to return false
        // so marker event is still handled by delegate
        return false
    }

    // let the custom infowindow follows the camera
    func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) {
        if (locationMarker != nil){
            let location = locationMarker.position
            customInfoView.center = mapView.projection.point(for: location)
        }
    }

    // take care of the close event
    func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
        customInfoView.removeFromSuperview()
    }