Wyświetl okno informacyjne dla znacznika

Ten przykład pokazuje znaczniki w 3 głównych miastach Australii. Gdy użytkownik kliknie znacznik, pojawi się okno informacyjne.

Rozpocznij

Zanim spróbujesz użyć przykładowego kodu, musisz skonfigurować środowisko programistyczne. Więcej informacji znajdziesz w próbkach kodu Maps SDK na iOS.

Wyświetlanie kodu

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
      

Lokalne uruchamianie pełnej przykładowej aplikacji

Przykładowa aplikacja Maps SDK na iOS jest dostępna jako archiwum do pobraniaGitHub. Aby zainstalować i wypróbować przykładową aplikację Maps SDK na iOS, wykonaj te czynności.

  1. Uruchom git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git, aby skopiować repozytorium z przykładami do katalogu lokalnego.
  2. Otwórz okno terminala, przejdź do katalogu, w którym sklonowano przykładowe pliki, a potem przejdź do katalogu GoogleMaps:

    Swift

    cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
    pod install
    open GoogleMapsSwiftDemos.xcworkspace

    Objective-C

    cd maps-sdk-for-ios-samples-main/GoogleMaps
    pod install
    open GoogleMapsDemos.xcworkspace
  3. W Xcode kliknij przycisk kompilacji, aby skompilować aplikację z bieżącym schematem. Kompilacja powoduje błąd i wyświetla prośbę o wpisanie klucza interfejsu API w pliku SDKConstants.swift (w przypadku Swift) lub SDKDemoAPIKey.h (w przypadku Objective-C).
  4. Jeśli nie masz jeszcze klucza interfejsu API, wykonaj te instrukcje, aby skonfigurować projekt w Konsoli Google Cloud i uzyskać klucz interfejsu API. Podczas konfigurowania klucza w konsoli Google Cloud możesz ograniczyć dostęp do niego do identyfikatora pakietu przykładowej aplikacji, aby mieć pewność, że tylko Twoja aplikacja będzie mogła z niego korzystać. Domyślny identyfikator pakietu aplikacji z próbnymi przykładami kodu pakietu SDK to com.example.GoogleMapsDemos.
  5. Zmień plik SDKConstants.swift w przypadku Swifta lub plik SDKDemoAPIKey.h w przypadku Objective-C i wklej klucz interfejsu API w definicji stałej apiKey lub kAPIKey. Na przykład:

    Swift

    static let apiKey = "YOUR_API_KEY"

    Objective-C

    static NSString *const kAPIKey = @"YOUR_API_KEY";
  6. W pliku SDKConstants.swift (Swift) lub SDKDemoAPIKey.h (Objective-C) usuń ten wiersz, ponieważ służy on do rejestrowania problemów zdefiniowanych przez użytkownika:

    Swift

    #error (Register for API Key and insert here. Then delete this line.)

    Objective-C

    #error Register for API Key and insert here.
  7. Utwórz i uruchom projekt. Pojawi się okno symulatora iOS z listą demo pakietu Maps SDK.
  8. Wybierz jedną z wyświetlonych opcji, aby wypróbować funkcję pakietu SDK Maps na iOS.
  9. Jeśli pojawi się prośba o zezwolenie aplikacji GoogleMapsDemos na dostęp do Twojej lokalizacji, wybierz Zezwól.