Okna informacyjne

Wybierz platformę: Android iOS JavaScript

Okno informacyjne nad znacznikiem.

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ść 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 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 na NO.
  • 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:

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.

Porównanie okien informacyjnych

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.