Okna informacyjne

Wybierz platformę: Android iOS JavaScript

Okno informacyjne wyświetlane nad znacznikiem.

Okno informacyjne pozwala wyświetlić informacje użytkownikowi po kliknięciu znacznika.

Okno informacyjne jest narysowane względem ekranu urządzenia i wyśrodkowane nad powiązanym z nim znacznikiem. Domyślne okno informacyjne zawiera pogrubiony tytuł, a pod nim tekst rozszerzenia informacji.

Zawartość okna informacyjnego jest określana przez właściwości title i snippet znacznika. Kliknięcie znacznika nie powoduje wyświetlenia okna informacyjnego, jeśli właściwości title i snippet są puste lub gdy ma wartość nil.

Wyświetlane jest tylko jedno okno informacyjne naraz. Jeśli użytkownik kliknie inny znacznik, bieżące okno zostanie ukryte i otworzy się nowe okno informacyjne. Jeśli użytkownik kliknie znacznik, który w danej chwili wyświetla okno informacyjne, okno informacyjne zostanie zamknięte i otwarte ponownie.

Utwórz niestandardowe okno informacyjne, w którym możesz umieścić dodatkowy tekst lub obrazy. Niestandardowe okno informacyjne zapewnia pełną kontrolę nad jego wyglądem.

Dodaj okno informacyjne

Poniższy fragment kodu pozwala utworzyć prosty znacznik z tylko tytułem tekstu okna informacyjnego.

Swift

let position = CLLocationCoordinate2D(latitude: 51.5, longitude: -0.127)
let london = GMSMarker(position: position)
london.title = "London"
london.map = mapView
      

Objective-C

CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127);
GMSMarker *london = [GMSMarker markerWithPosition:position];
london.title = @"London";
london.map = mapView;
      

Dzięki właściwości snippet możesz dodawać mniejszą czcionkę, dodatkowy tekst, który będzie się wyświetlać pod tytułem. Ciągi znaków, które są dłuższe niż szerokość okna informacyjnego, są automatycznie zawijane przez kilka wierszy. Bardzo długie wiadomości mogą zostać obcięte.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
      

Pokaż/ukryj okno informacyjne

Okna informacyjne są zaprojektowane w taki sposób, aby reagować na zdarzenia dotknięcia użytkownika dotyczące znacznika. Okno informacyjne możesz wyświetlić lub ukryć automatycznie, ustawiając właściwość selectedMarker właściwości GMSMapView:

  • Aby wyświetlić znacznik, ustaw selectedMarker na nazwę znacznika.
  • Aby ukryć ten element, ustaw selectedMarker na nil.

Swift

london.title = "London"
london.snippet = "Population: 8,174,100"
london.map = mapView
// Show marker
mapView.selectedMarker = london
// Hide marker
mapView.selectedMarker = nil
      

Objective-C

london.title = @"London";
london.snippet = @"Population: 8,174,100";
london.map = mapView;
// Show marker
mapView.selectedMarker = london;
// Hide marker
mapView.selectedMarker = nil;
      

Ustawianie automatycznego odświeżania okna informacyjnego

Ustaw tracksInfoWindowChanges na znaczniku na YES lub true, jeśli nowe właściwości lub zawartość okna informacyjnego mają być od razu wyświetlane po zmianie, bez czekania na ukrycie okna informacyjnego i ponowne wyświetlenie go. Wartość domyślna to NO lub false.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

Aby zdecydować, kiedy ustawić właściwość tracksInfoWindowChanges, weź pod uwagę zalety automatycznego ponownego obliczania okna informacyjnego. Na przykład:

  • Jeśli musisz wprowadzić serię zmian, możesz zmienić właściwość na YES, a potem z powrotem na NO.
  • Gdy animacja jest uruchomiona lub treści są wczytywane asynchronicznie, pozostaw właściwość ustawioną na YES, dopóki działania nie zostaną ukończone.

Podczas korzystania z właściwości iconView znacznika zapoznaj się też z uwagami, które należy wziąć pod uwagę.

Zmiana położenia okna informacyjnego

Okno informacyjne jest narysowane względem ekranu urządzenia i wyśrodkowane nad powiązanym znacznikiem. Możesz zmienić położenie okna informacyjnego względem znacznika za pomocą właściwości infoWindowAnchor. Ta właściwość akceptuje wartość CGPoint definiowaną jako przesunięcie (x,y), gdzie x i y mieszczą się w zakresie od 0,0 do 1,0. Domyślne przesunięcie to (0, 5, 0, 0) czyli środek u góry. Ustawienie przesunięcia infoWindowAnchor przydaje się do wyrównania okna informacyjnego z ikoną niestandardową.

Swift

london.infoWindowAnchor = CGPoint(x: 0.5, y: 0.5)
london.icon = UIImage(named: "house")
london.map = mapView
      

Objective-C

london.infoWindowAnchor = CGPointMake(0.5, 0.5);
london.icon = [UIImage imageNamed:@"house"];
london.map = mapView;
      

Obsługa zdarzeń w oknach informacyjnych

Możesz nasłuchiwać tych zdarzeń w oknie informacyjnym:

Aby nasłuchiwać zdarzeń, musisz wdrożyć protokół GMSMapViewDelegate. Zapoznaj się z przewodnikiem po zdarzeniach i listą metod w zadaniu GMSMapViewDelegate.

Serwis GitHub zawiera przykłady, które pokazują, jak obsługiwać zdarzenia w oknie informacyjnym:

Niestandardowe okna informacyjne

Dostosuj zawartość okien informacyjnych, tworząc podklasę UIView, która definiuje układ niestandardowego okna informacyjnego. W tej podklasie możesz w dowolny sposób zdefiniować widok. Możesz na przykład użyć niestandardowych instancji UILabel, aby wyświetlać tytuł i krótki opis oraz inne widoki, takie jak wystąpienia UIImageView, aby dodać obrazy wyświetlane w oknie informacyjnym.

Sprawdź, czy w ViewController zaimplementowano protokół GMSIndoorDisplayDelegate i zdefiniowano detektor zdarzenia mapView:markerInfoWindow:. Ten detektor zdarzeń jest wywoływany, gdy znacznik ma zostać wybrany. Pozwala zwrócić wystąpienie niestandardowej klasy UIView w celu zdefiniowania niestandardowego okna informacyjnego używanego przez znacznik.

Na poniższych obrazach widać domyślne okno informacyjne, okno informacyjne z niestandardową zawartością oraz okno informacyjne z niestandardową ramką i tłem.

Porównanie okna informacyjnego

Przykładowe fragmenty kodu na GitHub zawarte w pakiecie Maps SDK na iOS zawierają przykłady niestandardowych okien informacyjnych. Zobacz na przykład definicję klasy MarkerInfoWindowViewController.m (Objective-C) lub MarkerInfoWindowViewController.swift (Swift).

Informacje o pobieraniu i uruchamianiu tych przykładów znajdziesz w sekcji przykładowego kodu.