Janelas de informações

Selecione a plataforma: Android iOS JavaScript

Uma janela de informações exibida sobre um marcador.

Com uma janela de informações, você pode mostrar detalhes para o usuário quando ele toca em um marcador.

Uma janela de informações é desenhada orientada em relação à tela do dispositivo, centralizada acima do marcador associado. A janela de informações padrão contém o título em negrito, com o texto do snippet abaixo do título.

O conteúdo da janela de informações é definido pelas propriedades title e snippet do marcador. A janela de informações não é exibida após um clique no marcador se as propriedades title e snippet estiverem em branco ou forem nil.

Apenas uma janela aparece de cada vez. Se um usuário tocar em outro marcador, a janela atual será oculta e a nova janela de informações será aberta. Se o usuário clicar em um marcador que está mostrando uma janela de informações, ela será fechada e reaberta.

Crie uma janela de informações personalizada para adicionar mais texto ou imagens. Uma janela de informações personalizada oferece controle total sobre a aparência do pop-up.

Adicionar uma janela de informações

O snippet a seguir cria um marcador simples, com apenas um título para o texto da janela de informações.

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;
      

Com a propriedade snippet, é possível adicionar texto adicional que vai aparecer abaixo do título em uma fonte menor. Strings que são maiores que a largura da janela de informações são automaticamente quebradas em várias linhas. Mensagens muito longas podem ser truncadas.

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;
      

Mostrar/ocultar uma janela de informações

As janelas de informações são projetadas para responder a eventos de toque do usuário no marcador. É possível mostrar ou ocultar uma janela de informações de maneira programática definindo a propriedade selectedMarker de GMSMapView:

  • Defina selectedMarker como o nome do marcador para mostrá-lo.
  • Defina selectedMarker como nil para ocultá-la.

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;
      

Como definir uma janela de informações para atualizar automaticamente

Defina tracksInfoWindowChanges no marcador como YES ou true se quiser que novas propriedades ou o conteúdo da janela de informações sejam exibidos imediatamente quando alterados, em vez de esperar que a janela de informações seja ocultada e apareça novamente. O padrão é NO ou false.

Swift

london.tracksInfoWindowChanges = true
      

Objective-C

london.tracksInfoWindowChanges = YES;
      

Para decidir quando definir a propriedade tracksInfoWindowChanges, considere o desempenho em relação às vantagens de ter a janela de informações redesenhada automaticamente. Exemplo:

  • Se você tiver uma série de mudanças a fazer, mude a propriedade para YES e depois de volta para NO.
  • Quando uma animação está em execução ou o conteúdo está sendo carregado de forma assíncrona, mantenha a propriedade definida como YES até a conclusão das ações.

Consulte também as observações para consideração ao usar a propriedade iconView do marcador.

Como mudar a posição de uma janela de informações

Essas janelas aparecem na tela do dispositivo e ficam centralizadas acima do marcador associado. É possível alterar a posição da janela de informações em relação ao marcador definindo a propriedade infoWindowAnchor. Essa propriedade aceita um CGPoint, definido como um deslocamento (x, y), com x e y variando entre 0,0 e 1,0. O deslocamento padrão é (0,5, 0,0), ou seja, a parte central superior. A definição do deslocamento infoWindowAnchor é útil para alinhar a janela de informações a um ícone personalizado.

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;
      

Como processar eventos em janelas de informações

É possível detectar os seguintes eventos da janela de informações:

Para detectar eventos, é necessário implementar o protocolo GMSMapViewDelegate. Consulte o guia de eventos e a lista de métodos no GMSMapViewDelegate.

O GitHub (link em inglês) inclui exemplos que demonstram como processar eventos da janela de informações:

Personalizar janelas de informações

Personalize o conteúdo das janelas de informações criando uma subclasse de UIView que define o layout da janela de informações personalizada. Nessa subclasse, defina a visualização como quiser. Por exemplo, é possível usar instâncias UILabel personalizadas para mostrar o título e o texto do snippet e outras visualizações, como instâncias de UIImageView para adicionar imagens exibidas na janela de informações.

Verifique se o ViewController implementa o protocolo GMSIndoorDisplayDelegate e define um listener para o evento mapView:markerInfoWindow:. Esse listener de eventos é chamado quando um marcador está prestes a ser selecionado e permite retornar uma instância da sua classe UIView personalizada para definir a janela de informações personalizada usada pelo marcador.

As imagens abaixo mostram uma janela de informações padrão, outra com conteúdo personalizado e uma com frame e segundo plano personalizados.

Comparação de janelas de informações

Os exemplos de código no GitHub fornecidos com o SDK do Maps para iOS incluem exemplos de janelas de informações personalizadas. Por exemplo, consulte a definição de MarkerInfoWindowViewController.m (Objective-C) ou MarkerInfoWindowViewController.swift (Swift).

Consulte exemplos de código para informações sobre como fazer o download e executar esses exemplos.