Cómo configurar los modos normal y de poca luz

El SDK de Navigation para iOS no sigue automáticamente los modos claro y oscuro del sistema iOS. En cambio, un GMSMapView compatible con la navegación admite esquemas de colores normales y con poca luz a través de su propiedad lightingMode y el enum GMSNavigationLightingMode:

  • Modo normal (.normal): Usa un esquema de colores adecuado para la visualización a la luz del día.
  • Modo noche (.lowLight): Usa un esquema de colores adecuado para la visualización nocturna.

Cómo habilitar el cambio automático de modo de iluminación

El SDK de Navigation para iOS calcula el modo de iluminación recomendado según la hora del día y la ubicación del dispositivo, y lo expone a través de la propiedad suggestedLightingMode de GMSNavigator. Sin embargo, GMSMapView no aplica esta recomendación automáticamente.

Para cambiar automáticamente entre el modo normal y el modo noche, completa los siguientes pasos en tu controlador de vistas:

  1. Establece el modo de iluminación inicial al inicio: Cuando configures el mapa, lee la propiedad suggestedLightingMode de GMSNavigator y asígnale ese valor a mapView.lightingMode. Dado que el objeto de escucha solo se activa cuando cambia el modo de iluminación sugerido (por ejemplo, al amanecer o al atardecer), establecer el valor inicial garantiza que el mapa se renderice en el modo de luz tenue de inmediato si el usuario inicia la navegación de noche.
  2. Detecta cambios en el modo de iluminación durante la navegación: Adopta el protocolo GMSNavigatorListener y, luego, implementa el método navigator(_:didChangeSuggestedLightingMode:) para actualizar mapView.lightingMode cada vez que cambie el modo sugerido.

En el siguiente ejemplo, se muestra cómo establecer el modo de iluminación inicial y actualizarlo cuando cambia el modo de iluminación sugerido:

Swift

// Step 1: Set the initial lighting mode on launch or setup.
mapView.navigator?.add(self)
mapView.lightingMode = mapView.navigator?.suggestedLightingMode ?? .normal

// Step 2: Update the lighting mode when the sun sets or rises during navigation.
func navigator(
  _ navigator: GMSNavigator,
  didChangeSuggestedLightingMode lightingMode: GMSNavigationLightingMode
) {
  mapView.lightingMode = lightingMode
}

Objective-C

// Step 1: Set the initial lighting mode on launch or setup.
[_mapView.navigator addListener:self];
_mapView.lightingMode = _mapView.navigator.suggestedLightingMode;

// Step 2: Update the lighting mode when the sun sets or rises during navigation.
- (void)navigator:(GMSNavigator *)navigator
    didChangeSuggestedLightingMode:(GMSNavigationLightingMode)lightingMode {
  _mapView.lightingMode = lightingMode;
}

Para obtener más información sobre la adopción de GMSNavigatorListener, consulta Cómo declarar la conformidad con los protocolos requeridos en la guía de detección de eventos de navegación.

Forzar el modo normal o de baja luminosidad

Si no quieres que el mapa cambie de modo automáticamente, puedes forzar el modo normal o el modo de luz tenue configurando mapView.lightingMode directamente y omitiendo la actualización del objeto de escucha navigator(_:didChangeSuggestedLightingMode:).

En el siguiente ejemplo, se muestra cómo forzar el mapa al modo normal o de luz tenue:

Swift

// Force low-light mode.
mapView.lightingMode = .lowLight

// Or force normal (daylight) mode.
mapView.lightingMode = .normal

Objective-C

// Force low-light mode.
_mapView.lightingMode = GMSNavigationLightingModeLowLight;

// Or force normal (daylight) mode.
_mapView.lightingMode = GMSNavigationLightingModeNormal;

Personaliza los colores de la IU con poca luz

También puedes personalizar los colores de fondo principal y secundario del encabezado de navegación cuando el mapa está en modo de luz tenue. Para obtener más información sobre cómo personalizar estos colores, consulta Colores del encabezado del modo de luz tenue en la guía Modifica la IU de navegación.