es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualizar el estilo del mapa de iOS en Google Maps al cambiar el esquema de color del entorno (modo oscuro).

Cuando cambio la configuración del dispositivo entre el modo claro y el modo oscuro, mi estilo de mapa de Google Maps no se actualiza. Las otras vistas cambian correctamente al modo seleccionado, solo el mapa no cambia.

El estilo de mapa cambia correctamente cuando reinicio mi aplicación.

struct MapView: UIViewRepresentable {

@Environment(.colorScheme) var colorScheme

private let mapView = GMSMapView(frame: .zero)
private let defaultZoomLevel: Float = 10

func makeUIView(context: Context) -> GMSMapView {

mapView.delegate = context.coordinator
applyColorSchemeToMap()

return mapView

}

func updateUIView(_ mapView: GMSMapView, context: Context) {

applyColorSchemeToMap()

}

func applyColorSchemeToMap() {
do {
if let styleURL = Bundle.main.url(forResource: colorScheme == .dark ? "nightmapstyle" : "map_style", withExtension: "json") {
mapView.mapStyle = try GMSMapStyle(contentsOfFileURL: styleURL)
} else {
NSLog("No se pudo encontrar style.json")
}
} catch {
NSLog("No se pudieron cargar uno o más de los estilos de mapa. (error)")
}
}
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema puede ser causado por el hecho de que el mapStyle solo se aplica en las funciones makeUIView y updateUIView, que solo se llaman cuando la vista se carga por primera vez o se actualiza, respectivamente. Cuando se cambia el esquema de color, la función updateUIView se llama nuevamente, pero es posible que no sea suficiente para cambiar el mapStyle.

    Una posible solución es agregar un observador a la propiedad colorScheme y actualizar manualmente el mapStyle cada vez que cambie. Esto se puede hacer agregando el siguiente código a la estructura MapView:

    init() {
      // Agregar un observador a la propiedad colorScheme
      NotificationCenter.default.addObserver(self, selector: #selector(updateMapStyle), name: .init("AppleInterfaceThemeChangedNotification"), object: nil)
    }
    
    @objc func updateMapStyle() {
      // Actualizar manualmente el mapStyle cada vez que cambie el colorScheme
      applyColorSchemeToMap()
    }
    

    Este código agrega un observador a la propiedad colorScheme y llama a la función updateMapStyle cada vez que cambia. La función updateMapStyle luego llama a applyColorSchemeToMap para actualizar manualmente el mapStyle. Con este código agregado, el mapa ahora debería actualizar su estilo cuando se cambia el esquema de color del dispositivo.

Comments are closed.