Contenido del curso

Integración Nativa en iOS 18

Mapas y marcadores personalizados con MapKit

Resumen

Integrar mapas interactivos en una app iOS es más sencillo de lo que parece cuando usas MapKit, el framework de Apple para SwiftUI. Con pocas líneas puedes mostrar un mapa, añadir marcadores personalizados y mover la cámara hacia ubicaciones específicas, una habilidad clave para apps de geolocalización, delivery o turismo.

¿Qué es MapKit y cómo se carga un mapa en SwiftUI?

MapKit es el framework oficial de Apple que permite mostrar mapas, agregar pines, generar rutas y manipular vistas geográficas dentro de una aplicación iOS. Para usarlo basta con importar MapKit y declarar la vista Map dentro del cuerpo de tu pantalla [00:30].

¿Qué es MapKit? Es el framework de Apple que añade mapas interactivos a una app iOS, con soporte para marcadores, anotaciones, rutas y control de cámara.

Con solo escribir Map() ya tienes un mapa a pantalla completa que detecta tu ubicación aproximada por IP. A partir de ahí, puedes personalizar el estilo con el parámetro mapStyle, eligiendo entre estándar, satelital o híbrido [01:30].

¿Cómo agregar un marcador básico con coordenadas?

Para ubicar un punto necesitas dos valores: latitud y longitud. En SwiftUI los pasas mediante el objeto CLLocationCoordinate2D, que recibe ambos parámetros y los traduce al sistema cartográfico [03:00].

Un detalle interesante: en la región sur del planeta la longitud es negativa, así que no te asustes si ves valores con signo menos. Esto responde al plano cartesiano global.

Una vez tienes la coordenada, agregas un Marker dentro del Map con un título y el parámetro coordinate. El resultado por defecto es un pin rojo clásico marcando la ubicación exacta.

¿Cómo crear marcadores personalizados con anotaciones?

Las anotaciones te permiten reemplazar el pin rojo estándar por un diseño propio: imagen, color, forma e incluso tipografía personalizada [05:30]. Es la opción ideal cuando quieres reforzar la identidad de marca dentro del mapa.

Para construir una anotación visualmente atractiva, encadena estos modificadores sobre la imagen:

  • resizable() y frame(width:height:) con 45 unidades para evitar que la imagen original desborde la pantalla.
  • font(.largeTitle) para el texto del rótulo.
  • foregroundColor(.red) y un color de fondo blanco para resaltar el ícono.
  • clipShape con un rectángulo redondeado y cornerRadius de 10 unidades.
  • padding() para dar respiración al marcador.

De esa forma cada lugar deja de ser un pin genérico y pasa a comunicar algo, por ejemplo el logo de Platzi o un ícono de parque.

¿Cómo iterar varios marcadores de forma eficiente?

Si tienes muchos lugares, lo recomendable es crear un objeto con propiedades de latitud, longitud y nombre, guardarlos en una colección y recorrerlos con un ForEach para generar las anotaciones automáticamente [09:30]. Manualmente funciona, pero escala mal.

¿Cuál es la diferencia entre Marker y Annotation? Marker es el pin rojo estándar de Apple con título; Annotation te deja insertar cualquier vista SwiftUI como marcador, ideal para diseños personalizados.

¿Cómo controlar la cámara del mapa al pulsar un botón?

La cámara es el ojo virtual que enfoca el mapa: puede acercarse, alejarse, moverse o rotar. Para manipularla necesitas una variable de estado de tipo MapCameraPosition, inicializada en .automatic, y pasarla al parámetro position del Map [12:00].

Con esa variable en estado, cualquier cambio se refleja al instante en el mapa. Esa es la base para crear botones que centren la vista en lugares concretos.

¿Cómo añadir botones fuera del mapa con safeAreaInset?

El modificador safeAreaInset(edge: .bottom) te permite anclar contenido fuera del área del mapa sin romper el layout. Dentro creas un HStack con botones que, al ser pulsados, actualizan la cámara [14:30].

Los pasos para que un botón centre la cámara en una ubicación son:

  1. Asignar a la variable de cámara un nuevo valor con .region.
  2. Pasar un MKCoordinateRegion con center apuntando a la coordenada deseada.
  3. Definir latitudinalMeters y longitudinalMeters (por ejemplo, 200) para fijar la distancia visible.

Ojo con el orden y la sintaxis: primero latitud, después longitud, y los parámetros llevan la s final (meters). Es un error común que el compilador marca de inmediato.

¿Para qué sirve safeAreaInset en SwiftUI? Permite colocar vistas fijas como botones o barras dentro del área segura sin que el contenido principal las tape, manteniendo el mapa visible.

¿Cómo combinar marcadores, anotaciones y cámara en una misma vista?

La fuerza real de MapKit aparece cuando mezclas todo: anotaciones personalizadas para tus lugares principales, un Marker clásico para puntos secundarios y botones que reposicionan la cámara según la acción del usuario.

Para redondear el diseño visual del panel de botones, aplica un Spacer() entre cada uno para distribuir el espacio, un padding(.top) y un background(.thinMaterial) que aporta ese efecto translúcido tan característico de iOS.

Con esa combinación tu mapa pasa de ser una vista estática a una experiencia navegable: tres anotaciones con logos propios, un marcador adicional para una ciudad cercana como Bogotá y botones inferiores que mueven la cámara entre Platzi, Parque de Lourdes y Parque de los Hippies.

¿Ya probaste crear tus propios marcadores con coordenadas de tu ciudad? Comparte tu captura en los comentarios y cuenta qué lugares elegiste para personalizar tu mapa.