Page Summary
-
This example showcases markers for Sydney, Melbourne, and Brisbane on a Google Map within an iOS app.
-
Tapping a marker reveals an info window, with a custom info window displayed for Sydney and Brisbane.
-
Users can run the full sample app locally by cloning the repository, installing dependencies, and building the project in Xcode.
-
Before running the app, obtain and configure a Google Maps API key within the project's source code.
Get started
Before you can try the sample code, you must configure your development environment. For more information, see Maps SDK for iOS code samples .
View the code
Swift
import GoogleMaps import UIKit final class MarkerInfoWindowViewController : UIViewController { private let sydneyMarker = GMSMarker ( position : CLLocationCoordinate2D ( latitude : - 33.8683 , longitude : 151.2086 )) private let melbourneMarker = GMSMarker ( position : CLLocationCoordinate2D ( latitude : - 37.81969 , longitude : 144.966085 )) private let brisbaneMarker = GMSMarker ( position : CLLocationCoordinate2D ( latitude : - 27.4710107 , longitude : 153.0234489 )) private lazy var contentView : UIImageView = { return UIImageView ( image : UIImage ( named : "aeroplane" )) }() override func loadView () { let cameraPosition = GMSCameraPosition ( latitude : - 37.81969 , longitude : 144.966085 , zoom : 4 ) let mapView = GMSMapView ( frame : . zero , camera : cameraPosition ) mapView . delegate = self view = mapView sydneyMarker . title = "Sydney" sydneyMarker . snippet = "Population: 4,605,992" sydneyMarker . map = mapView melbourneMarker . title = "Melbourne" melbourneMarker . snippet = "Population: 4,169,103" melbourneMarker . map = mapView brisbaneMarker . title = "Brisbane" brisbaneMarker . snippet = "Population: 2,189,878" brisbaneMarker . map = mapView } } extension MarkerInfoWindowViewController : GMSMapViewDelegate { func mapView ( _ mapView : GMSMapView , markerInfoWindow marker : GMSMarker ) - > UIView ? { if marker == sydneyMarker { return contentView } return nil } func mapView ( _ mapView : GMSMapView , markerInfoContents marker : GMSMarker ) - > UIView ? { if marker == brisbaneMarker { return contentView } return nil } func mapView ( _ mapView : GMSMapView , didCloseInfoWindowOf marker : GMSMarker ) { showToast ( message : "Info window for marker \( marker . title ?? "" ) closed." ) } func mapView ( _ mapView : GMSMapView , didLongPressInfoWindowOf marker : GMSMarker ) { showToast ( message : "Info window for marker \( marker . title ?? "" ) long pressed." ) } } extension UIViewController { func showToast ( message : String ) { let toast = UIAlertController ( title : nil , message : message , preferredStyle : . alert ) present ( toast , animated : true , completion : { DispatchQueue . main . asyncAfter ( deadline : DispatchTime . now () + . seconds ( 2 )) { toast . dismiss ( animated : true ) } }) } }
Objective-C
#import "GoogleMapsDemos/Samples/MarkerInfoWindowViewController.h" #import "GoogleMapsDemos/UIViewController+GMSToastMessages.h" #import <GoogleMaps/GoogleMaps.h> @interface MarkerInfoWindowViewController () < GMSMapViewDelegate > @end @implementation MarkerInfoWindowViewController { GMSMarker * _sydneyMarker ; GMSMarker * _melbourneMarker ; GMSMarker * _brisbaneMarker ; UIView * _contentView ; } - ( void ) viewDidLoad { [ super viewDidLoad ]; GMSCameraPosition * camera = [ GMSCameraPosition cameraWithLatitude : -37.81969 longitude : 144.966085 zoom : 4 ]; GMSMapView * mapView = [ GMSMapView mapWithFrame : CGRectZero camera : camera ]; _sydneyMarker = [[ GMSMarker alloc ] init ]; _sydneyMarker . title = @"Sydney" ; _sydneyMarker . snippet = @"Population: 4,605,992" ; _sydneyMarker . position = CLLocationCoordinate2DMake ( -33.8683 , 151.2086 ); _sydneyMarker . map = mapView ; NSLog ( @"sydneyMarker: %@" , _sydneyMarker ); _melbourneMarker . map = nil ; _melbourneMarker = [[ GMSMarker alloc ] init ]; _melbourneMarker . title = @"Melbourne" ; _melbourneMarker . snippet = @"Population: 4,169,103" ; _melbourneMarker . position = CLLocationCoordinate2DMake ( -37.81969 , 144.966085 ); _melbourneMarker . map = mapView ; NSLog ( @"melbourneMarker: %@" , _melbourneMarker ); _brisbaneMarker . map = nil ; _brisbaneMarker = [[ GMSMarker alloc ] init ]; _brisbaneMarker . title = @"Brisbane" ; _brisbaneMarker . snippet = @"Population: 2,189,878" ; _brisbaneMarker . position = CLLocationCoordinate2DMake ( -27.4710107 , 153.0234489 ); _brisbaneMarker . map = mapView ; NSLog ( @"brisbaneMarker: %@" , _brisbaneMarker ); _contentView = [[ UIImageView alloc ] initWithImage : [ UIImage imageNamed : @"aeroplane" ]]; mapView . delegate = self ; self . view = mapView ; } #pragma mark GMSMapViewDelegate - ( UIView * ) mapView: ( GMSMapView * ) mapView markerInfoWindow: ( GMSMarker * ) marker { if ( marker == _sydneyMarker ) { return _contentView ; } return nil ; } - ( UIView * ) mapView: ( GMSMapView * ) mapView markerInfoContents: ( GMSMarker * ) marker { if ( marker == _brisbaneMarker ) { return _contentView ; } return nil ; } - ( void ) mapView: ( GMSMapView * ) mapView didCloseInfoWindowOfMarker: ( GMSMarker * ) marker { NSString * message = [ NSString stringWithFormat : @"Info window for marker %@ closed." , marker . title ]; [ self gms_showToastWithMessage : message ]; } - ( void ) mapView: ( GMSMapView * ) mapView didLongPressInfoWindowOfMarker: ( GMSMarker * ) marker { NSString * message = [ NSString stringWithFormat : @"Info window for marker %@ long pressed." , marker . title ]; [ self gms_showToastWithMessage : message ]; } @ end . m

