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
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
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 naNO
. - 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:
mapView:markerInfoWindow:
– wywoływana, gdy znacznik zostanie wybrany. Może opcjonalnie zwrócić niestandardowe okno informacyjne jako właściwośćUIView
do wykorzystania w przypadku znacznika. Więcej informacji znajdziesz poniżej w sekcji Niestandardowe okna informacyjne.mapView:markerInfoContents:
– wywoływana, gdymapView:markerInfoWindow
zwróci wartość nil.mapView:didCloseInfoWindowOfMarker:
– wywoływana po zamknięciu okna informacyjnego znacznika.mapView:didLongPressInfoWindowOfMarker:
– wywołana po przytrzymaniu okna informacyjnego znacznika.
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.
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.