Eventos
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Selecione a plataforma:
Android
iOS
JavaScript
Com o SDK do Maps para iOS, é possível detectar eventos que ocorrem no mapa, como alteração da câmera ou toque no marcador.
Introdução
Para detectar eventos, é necessário implementar o protocolo
GMSMapViewDelegate
. Normalmente, você implementa esse protocolo no controlador de visualizações que exibe o mapa. Veja um exemplo abaixo:
Swift
import GoogleMaps
class Events: UIViewController, GMSMapViewDelegate {
// ...
}
Objective-C
@import GoogleMaps;
@interface Events : UIViewController <GMSMapViewDelegate>
@end
Quando o GMSMapView
for criado, defina o delegado dele como seu controlador de visualização. O GMSMapViewDelegate
oferece apenas métodos opcionais. Para detectar um evento específico, implemente o método relevante.
Swift
override func loadView() {
super.loadView()
let camera = GMSCameraPosition.camera(
withLatitude: 1.285,
longitude: 103.848,
zoom: 12
)
let mapView = GMSMapView.map(withFrame: .zero, camera: camera)
mapView.delegate = self
self.view = mapView
}
// MARK: GMSMapViewDelegate
func mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {
print("You tapped at \(coordinate.latitude), \(coordinate.longitude)")
}
Objective-C
- (void)loadView {
[super loadView];
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285
longitude:103.848
zoom:12];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.delegate = self;
self.view = mapView;
}
#pragma mark - GMSMapViewDelegate
- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {
NSLog(@"You tapped at %f,%f", coordinate.latitude, coordinate.longitude);
}
Posição da câmera
Usando o GMSMapViewDelegate
, é possível detectar mudanças na posição da câmera usada para renderizar o mapa. Há três eventos distintos:
mapView:willMove:
indica que a posição da câmera está prestes a mudar.
Se o argumento gesture
estiver definido como YES
, isso vai acontecer porque um usuário fez um gesto natural no GMSMapView
, como um movimento de arrastar ou inclinar.
Caso contrário, NO
indica que isso faz parte de uma mudança programática, por exemplo, usando métodos como animateToCameraPosition:
ou atualizando diretamente a camada do mapa. Também pode ser NO
se um usuário tiver tocado nos botões "Minha localização" ou "Bússola", que geram animações que mudam a câmera.
Esse método pode ser chamado várias vezes antes de mapView:idleAtCameraPosition:
ser invocado, embora isso geralmente aconteça apenas se animações e gestos ocorrerem ao mesmo tempo. Por exemplo, um gesto cancela qualquer animação atual e chama mapView:willMove:
uma segunda vez.
mapView:didChangeCameraPosition:
é chamado repetidamente durante um gesto ou
animação, sempre após uma chamada para mapView:willMove:
. Ela recebe a posição intermediária da câmera.
Por fim, mapView:idleAtCameraPosition:
é invocado quando a posição da câmera
em GMSMapView
fica inativa e especifica a posição relevante da câmera.
Nesse momento, todas as animações e gestos foram interrompidos.
Os aplicativos podem usar esse evento para acionar uma atualização de marcadores ou outros
conteúdos exibidos no GMSMapView
, em vez de, por exemplo,
recarregar o conteúdo a cada mudança de câmera.
Por exemplo, um aplicativo pode limpar o GMSMapView
ao mover e depois
fazer a geocodificação reversa da posição em que a câmera fica parada.
Swift
let geocoder = GMSGeocoder()
func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
mapView.clear()
}
func mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) {
geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in
guard error == nil else {
return
}
if let result = response?.firstResult() {
let marker = GMSMarker()
marker.position = cameraPosition.target
marker.title = result.lines?[0]
marker.snippet = result.lines?[1]
marker.map = mapView
}
}
}
Objective-C
GMSGeocoder *geocoder;
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
[mapView clear];
}
- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition {
id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {
if (error != nil) {
return;
}
GMSReverseGeocodeResult *result = response.firstResult;
GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target];
marker.title = result.lines[0];
marker.snippet = result.lines[1];
marker.map = mapView;
};
[geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler];
}
Eventos em pontos de interesse comerciais e de outros tipos
Por padrão, os pontos de interesse (POIs, na sigla em inglês) aparecem no mapa de base junto com seus respectivos ícones. Os POIs incluem parques, escolas, estabelecimentos do governo e outros, além de POIs comerciais, como lojas, restaurantes e hotéis.
Você pode responder a eventos de clique em um PDI. Consulte o guia sobre
empresas e outros pontos de interesse.
Outros eventos
Para saber mais sobre a lista completa de métodos em GMSMapViewDelegate
, consulte
o guia de referência.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-08-31 UTC.
[null,null,["Última atualização 2025-08-31 UTC."],[[["\u003cp\u003eThe Maps SDK for iOS allows you to listen to events like camera changes and marker taps by implementing the \u003ccode\u003eGMSMapViewDelegate\u003c/code\u003e protocol.\u003c/p\u003e\n"],["\u003cp\u003eYou can track camera position changes using events such as \u003ccode\u003ewillMove\u003c/code\u003e, \u003ccode\u003edidChangeCameraPosition\u003c/code\u003e, and \u003ccode\u003eidleAtCameraPosition\u003c/code\u003e to update map content dynamically.\u003c/p\u003e\n"],["\u003cp\u003eRespond to clicks on businesses and points of interest (POIs) using dedicated event handling mechanisms.\u003c/p\u003e\n"],["\u003cp\u003eRefer to the \u003ccode\u003eGMSMapViewDelegate\u003c/code\u003e reference for a comprehensive list of available events and methods.\u003c/p\u003e\n"]]],["To listen to events on the Maps SDK for iOS, implement the `GMSMapViewDelegate` protocol in your view controller. Set the `GMSMapView`'s delegate to your view controller during creation. Implement relevant methods from the `GMSMapViewDelegate` to listen to specific events. For camera position changes, use `mapView:willMove:`, `mapView:didChangeCameraPosition:`, and `mapView:idleAtCameraPosition:`. The example provided demonstrates how to clear the map on move and reverse geocode the final camera position.\n"],null,["\u003cbr /\u003e\n\nSelect platform: [Android](/maps/documentation/android-sdk/events \"View this page for the Android platform docs.\") [iOS](/maps/documentation/ios-sdk/events \"View this page for the iOS platform docs.\") [JavaScript](/maps/documentation/javascript/events \"View this page for the JavaScript platform docs.\")\n\n\u003cbr /\u003e\n\nUsing the Maps SDK for iOS, you can listen to events that occur on the\nmap, such as camera change events or marker tap events.\n\nIntroduction\n\nTo listen to events, you must implement the\n[`GMSMapViewDelegate`](/maps/documentation/ios-sdk/reference/objc/Protocols/GMSMapViewDelegate) protocol. Typically, you implement\nthis protocol on the view controller that displays the map. Below is an example:\n\n\nSwift \n\n```swift\nimport GoogleMaps\n\nclass Events: UIViewController, GMSMapViewDelegate {\n // ...\n}\n \n```\n\nObjective-C \n\n```objective-c\n@import GoogleMaps;\n\n@interface Events : UIViewController \u003cGMSMapViewDelegate\u003e\n\n@end\n \n```\n\n\u003cbr /\u003e\n\nWhen the `GMSMapView` is created, you can set its delegate to your view\ncontroller. The `GMSMapViewDelegate` provides only optional methods. To listen\nto any particular event, you must implement the relevant method.\n\n\nSwift \n\n```swift\noverride func loadView() {\n super.loadView()\n let camera = GMSCameraPosition.camera(\n withLatitude: 1.285,\n longitude: 103.848,\n zoom: 12\n )\n let mapView = GMSMapView.map(withFrame: .zero, camera: camera)\n mapView.delegate = self\n self.view = mapView\n}\n\n// MARK: GMSMapViewDelegate\n\nfunc mapView(_ mapView: GMSMapView, didTapAt coordinate: CLLocationCoordinate2D) {\n print(\"You tapped at \\(coordinate.latitude), \\(coordinate.longitude)\")\n}\n \n```\n\nObjective-C \n\n```objective-c\n- (void)loadView {\n [super loadView];\n GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:1.285\n longitude:103.848\n zoom:12];\n GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];\n mapView.delegate = self;\n self.view = mapView;\n}\n\n#pragma mark - GMSMapViewDelegate\n\n- (void)mapView:(GMSMapView *)mapView didTapAtCoordinate:(CLLocationCoordinate2D)coordinate {\n NSLog(@\"You tapped at %f,%f\", coordinate.latitude, coordinate.longitude);\n}\n \n```\n\n\u003cbr /\u003e\n\nCamera position\n\nUsing the `GMSMapViewDelegate`, you can listen to changes to the camera position\nused to render the map. There are three distinct events.\n\n- `mapView:willMove:` indicates that the camera position is about to change.\n If the `gesture` argument is set to `YES`, this is due to a user performing\n a natural gesture on the `GMSMapView`, such as a pan or tilt.\n Otherwise, `NO` indicates that this is part of a programmatic change -\n for example, via methods such as `animateToCameraPosition:` or updating the\n map's layer directly. This may also be `NO` if a user has tapped on the My\n Location or compass buttons, which generate animations that change the\n camera.\n\n This method may be called several times before\n `mapView:idleAtCameraPosition:` is invoked, although this typically\n happens only if animations and gestures occur at the same time - a gesture\n will cancel any current animation, for instance, and will call\n `mapView:willMove:` a second time.\n- `mapView:didChangeCameraPosition:` is called repeatedly during a gesture or\n animation, always after a call to `mapView:willMove:`. It is passed the\n intermediate camera position.\n\n- Finally, `mapView:idleAtCameraPosition:` is invoked once the camera position\n on `GMSMapView` becomes idle, and specifies the relevant camera position.\n At this point, all animations and gestures have stopped.\n\n Applications can use this event to trigger a refresh of markers or other\n content being displayed on the `GMSMapView`, rather than, for example,\n reloading the content on every camera change.\n\nFor example, an application can clear the `GMSMapView` on move, and then\nreverse geocode the position the camera comes to rest on.\n\n\nSwift \n\n```swift\nlet geocoder = GMSGeocoder()\n\nfunc mapView(_ mapView: GMSMapView, willMove gesture: Bool) {\n mapView.clear()\n}\n\nfunc mapView(_ mapView: GMSMapView, idleAt cameraPosition: GMSCameraPosition) {\n geocoder.reverseGeocodeCoordinate(cameraPosition.target) { (response, error) in\n guard error == nil else {\n return\n }\n\n if let result = response?.firstResult() {\n let marker = GMSMarker()\n marker.position = cameraPosition.target\n marker.title = result.lines?[0]\n marker.snippet = result.lines?[1]\n marker.map = mapView\n }\n }\n }\n \n```\n\nObjective-C \n\n```objective-c\nGMSGeocoder *geocoder;\n\n- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {\n [mapView clear];\n}\n\n- (void)mapView:(GMSMapView *)mapView idleAtCameraPosition:(GMSCameraPosition *)cameraPosition {\n id handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {\n if (error != nil) {\n return;\n }\n GMSReverseGeocodeResult *result = response.firstResult;\n GMSMarker *marker = [GMSMarker markerWithPosition:cameraPosition.target];\n marker.title = result.lines[0];\n marker.snippet = result.lines[1];\n marker.map = mapView;\n };\n [geocoder reverseGeocodeCoordinate:cameraPosition.target completionHandler:handler];\n}\n \n```\n\n\u003cbr /\u003e\n\nEvents on businesses and other points of interest\n\nBy default, points of interest (POIs) appear on the base map along with their corresponding icons. POIs include parks, schools, government buildings, and more, as well as business POIs such as shops, restaurants, and hotels.\n\nYou can respond to click events on a POI. See the guide to\n[businesses and other points of interest](/maps/documentation/ios-sdk/poi).\n\nOther events\n\nTo learn about the full list of methods on `GMSMapViewDelegate`, see\n[the reference guide](/maps/documentation/ios-sdk/reference/objc/Protocols/GMSMapViewDelegate)."]]