Infofenster

Plattform auswählen: Android iOS JavaScript

Ein Infofenster, das über einer Markierung angezeigt wird.

In einem Infofenster kannst du Informationen für den Nutzer anzeigen, wenn dieser auf eine Markierung tippt.

Infofenster werden am Gerätebildschirm ausgerichtet und über der zugehörigen Markierung zentriert. Das Standardinfofenster enthält den Titel in Fettdruck und darunter den Snippet-Text.

Der Inhalt des Infofensters wird durch die Eigenschaften title und snippet der Markierung definiert. Wenn die Eigenschaften title und snippet leer oder nil sind, wird beim Klicken auf die Markierung kein Infofenster angezeigt.

Es wird immer nur jeweils ein Infofenster eingeblendet. Wenn ein Nutzer auf eine andere Markierung tippt, wird das aktuelle Fenster ausgeblendet und das neue Infofenster geöffnet. Wenn der Nutzer auf eine Markierung klickt, zu der schon ein Infofenster angezeigt wird, wird es geschlossen und noch einmal geöffnet.

Du kannst ein benutzerdefiniertes Infofenster erstellen, um zusätzlichen Text oder Bilder hinzuzufügen. Mit einem benutzerdefinierten Infofenster hast du die vollständige Kontrolle über das Aussehen des Pop-ups.

Infofenster hinzufügen

Mit dem folgenden Snippet wird eine einfache Markierung mit einem Titel für den Text des Infofensters erstellt.

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;
      

Mit der Eigenschaft snippet kannst du zusätzlichen Text hinzufügen, der unter dem Titel in einer kleineren Schriftart angezeigt wird. Strings, die länger als die Breite des Infofensters sind, werden automatisch über mehrere Zeilen umgebrochen. Sehr lange Nachrichten werden möglicherweise abgeschnitten.

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;
      

Infofenster ein- oder ausblenden

Infofenster reagieren auf die Touch-Events des Nutzers auf der Markierung. Du kannst ein Infofenster programmatisch ein- oder ausblenden, indem du die selectedMarker Eigenschaft von GMSMapView festlegst:

  • Setze selectedMarker auf den Namen der Markierung, um sie anzuzeigen.
  • Setze selectedMarker auf nil, um sie auszublenden.

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;
      

Infofenster automatisch aktualisieren

Setze tracksInfoWindowChanges für die Markierung auf YES oder true, wenn neue Eigenschaften oder der Inhalt des Infofensters sofort angezeigt werden sollen, sobald sie geändert werden. Du musst dann nicht warten, bis das Infofenster ausgeblendet und wieder eingeblendet wird. Der Standardwert ist NO oder false.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

Bei der Entscheidung, wann die tracksInfoWindowChanges Eigenschaft festgelegt werden soll, musst du die Leistungsaspekte gegen die Vorteile abwägen, die sich aus dem automatischen Neuzeichnen des Infofensters ergeben. Beispiel:

  • Wenn du eine Reihe von Änderungen vornehmen musst, kannst du die Eigenschaft auf YES und dann wieder auf NO setzen.
  • Wenn eine Animation ausgeführt wird oder die Inhalte asynchron geladen werden, solltest du die Eigenschaft auf YES setzen, bis die Aktionen abgeschlossen sind.

Beachte auch die Hinweise zur Verwendung bei der Verwendung der iconView Eigenschaft der Markierung.

Position eines Infofensters ändern

Infofenster werden am Gerätebildschirm ausgerichtet und über der zugehörigen Markierung zentriert. Du kannst die Position des Infofensters relativ zur Markierung ändern, indem du die Eigenschaft infoWindowAnchor festlegst. Diese Eigenschaft akzeptiert einen CGPoint, der als (x, y)-Offset definiert ist, wobei sowohl x als auch y zwischen 0,0 und 1,0 liegen. Der Standard-Offset ist (0,5, 0,0), d.h.die obere Mitte. Das Festlegen des infoWindowAnchor-Offsets ist nützlich, um das Infofenster an einem benutzerdefinierten Symbol auszurichten.

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;
      

Ereignisse in Infofenstern verarbeiten

Du kannst die folgenden Infofenster-Ereignisse beobachten:

Um Ereignisse zu beobachten, musst du das GMSMapViewDelegate Protokoll implementieren. Weitere Informationen findest du im Leitfaden zu Ereignissen und in der Liste der Methoden für GMSMapViewDelegate.

GitHub findest du Beispiele, die zeigen, wie Ereignisse in Infofenstern verarbeitet werden:

Benutzerdefinierte Infofenster

Du kannst den Inhalt von Infofenstern anpassen, indem du eine Unterklasse von UIView erstellst, die das Layout des benutzerdefinierten Infofensters definiert. In dieser Unterklasse kannst du die Ansicht nach Belieben definieren. Du kannst beispielsweise benutzerdefinierte UILabel Instanzen verwenden, um Titel und Snippet-Text anzuzeigen, und andere Ansichten wie UIImageView Instanzen, um Bilder hinzuzufügen, die im Infofenster angezeigt werden.

Achte darauf, dass dein ViewController das GMSIndoorDisplayDelegate Protokoll implementiert und einen Listener für das Ereignis „mapView:markerInfoWindow:“ definiert. Dieser Ereignis-Listener wird aufgerufen, wenn eine Markierung ausgewählt werden soll. Du kannst eine Instanz deiner benutzerdefinierten UIView-Klasse zurückgeben, um das benutzerdefinierte Infofenster zu definieren, das von der Markierung verwendet wird.

Die folgenden Bilder zeigen ein Standardinfofenster, ein Infofenster mit angepasstem Inhalt und ein Infofenster mit angepasstem Rahmen und Hintergrund.

Infofenstervergleich

Die Codebeispiele auf GitHub die mit dem Maps SDK for iOS bereitgestellt werden enthalten Beispiele für benutzerdefinierte Infofenster. Siehe beispielsweise die Definition von MarkerInfoWindowViewController.m (Objective-C) oder MarkerInfoWindowViewController.swift (Swift).

Informationen zum Herunterladen und Ausführen dieser Beispiele findest du in den Codebeispielen.