Okno informacyjne umożliwia wyświetlanie informacji użytkownikowi po kliknięciu znacznika.
Okno informacyjne jest rysowane zorientowane na ekran urządzenia i wyśrodkowane nad powiązanym znacznikiem. Domyślne okno informacyjne zawiera pogrubiony tytuł, a poniżej tytułu znajduje się krótki opis.
Zawartość okna informacyjnego jest określana przez właściwości title
i snippet
znacznika. Kliknięcie znacznika nie spowoduje wyświetlenia okna informacyjnego, jeśli właściwości title
i snippet
są puste lub pole nil
.
W danym momencie wyświetlane jest tylko jedno okno informacyjne. 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 aktualnie wyświetla okno informacyjne, zostanie ono zamknięte i otwarte ponownie.
Utwórz niestandardowe okno informacyjne i dodaj do niego dodatkowy tekst lub obrazy. Niestandardowe okno informacyjne daje pełną kontrolę nad wyglądem wyskakującego okienka.
Dodawanie okna informacyjnego
Ten fragment kodu tworzy prosty znacznik z samym 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;
Właściwość snippet
pozwala dodać dodatkowy tekst, który będzie wyświetlany pod tytułem mniejszą czcionką. Ciągi znaków dłuższe niż szerokość okna informacyjnego są automatycznie zawijane względem kilku 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;
Pokazywanie/ukrywanie okna informacyjnego
Okna informacyjne służą do reagowania na zdarzenia dotknięcia znacznika przez użytkownika.
Okno informacyjne możesz wyświetlać lub ukrywać automatycznie, ustawiając właściwość selectedMarker
właściwości GMSMapView
:
- Ustaw
selectedMarker
na nazwę znacznika, aby go wyświetlić. - Aby ukryć kartę
selectedMarker
, ustaw jej wartość nanil
.
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
w znaczniku na YES
lub true
, jeśli chcesz, aby nowe właściwości lub zawartość okna informacyjnego były wyświetlane natychmiast po zmianie, bez konieczności czekania, aż okno informacyjne zostanie ukryte, a następnie wyświetlone ponownie. Wartością domyślną jest NO
lub false
.
Swift
london.tracksInfoWindowChanges = true
Objective-C
london.tracksInfoWindowChanges = YES;
Podejmując decyzję o tym, kiedy ustawić właściwość tracksInfoWindowChanges
, należy porównać wydajność z zaletami automatycznego odświeżenia okna informacyjnego. Na przykład:
- Jeśli masz do wprowadzenia serię zmian, możesz zmienić właściwość na
YES
, a potem z powrotem naNO
. - Gdy animacja jest aktywna lub zawartość jest wczytywana asynchronicznie, właściwość powinna być ustawiona na
YES
do chwili zakończenia działań.
Jeśli używasz właściwości iconView
znacznika, weź pod uwagę uwaga do rozważenia.
Zmiana położenia okna informacyjnego
Okno informacyjne jest wyświetlane zorientowane na ekran urządzenia i znajduje się wyśrodkowane nad powiązanym znacznikiem. Położenie okna informacyjnego względem znacznika możesz zmienić, ustawiając właściwość infoWindowAnchor
. Ta właściwość akceptuje wartość CGPoint
zdefiniowaną jako przesunięcie (x,y), gdzie zarówno x, jak i y mieszczą się w zakresie od 0,0 do 1,0. Domyślne przesunięcie to (0,5, 0,0), czyli od góry do środka. Skonfigurowanie przesunięcia infoWindowAnchor
przydaje się do wyrównywania 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:
mapView:markerInfoWindow:
– wywoływane, gdy znacznik ma zostać wybrany. Może opcjonalnie zwracać niestandardowe okno informacyjne w postaciUIView
, które zostanie użyte jako oznaczenie. Więcej informacji znajdziesz poniżej w sekcji Niestandardowe okna informacyjne.mapView:markerInfoContents:
– wywoływane, gdymapView:markerInfoWindow
zwraca wartość nil.mapView:didCloseInfoWindowOfMarker:
– wywoływane po zamknięciu okna informacyjnego znacznika.mapView:didLongPressInfoWindowOfMarker:
– wywołanie po długim naciśnięciu okna informacyjnego znacznika.
Aby nasłuchiwać zdarzeń, musisz wdrożyć protokół GMSMapViewDelegate
. Zobacz przewodnik po zdarzeniach i listę metod w GMSMapViewDelegate
.
W GitHub znajdują się przykłady pokazujące, jak obsługiwać zdarzenia okna informacyjnego:
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 definiować widok. Możesz na przykład używać niestandardowych wystąpień UILabel
do wyświetlania tekstu tytułu i krótkiego opisu oraz innych widoków, takich jak wystąpienia UIImageView
, w celu dodawania obrazów wyświetlanych w oknie informacyjnym.
Sprawdź, czy ViewController
implementuje protokół GMSIndoorDisplayDelegate
i określa odbiornik zdarzenia mapView:markerInfoWindow:. Ten detektor zdarzeń jest wywoływany, gdy znacznik ma zostać wybrany. Umożliwia zwrócenie wystąpienia 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 dostosowanymi treściami oraz okno informacyjne ze spersonalizowaną ramką i tłem.

Przykładowy kod w serwisie GitHub udostępniony w pakiecie Maps SDK na iOS zawiera przykłady niestandardowych okien informacyjnych. Sprawdź na przykład definicję typu MarkerInfoWindowViewController.m (Objective-C) lub MarkerInfoWindowViewController.swift (Swift).
Informacje o pobieraniu i uruchamianiu tych przykładów znajdziesz w przykładowym kodzie.