Contenido del curso
Tu primera app en iOS
- 4

Creación de la primera app iOS con Xcode: Login de Facebook
09:02 min - 5

Navegación entre pantallas en iOS con UI Navigation Controller
05:49 min - 6

Creación y conexión de múltiples storyboards en iOS
06:14 min - 7

Conexiones IBOutlets y IBActions en iOS con Storyboards
11:00 min - 8

Comparativa: Auto Layout vs SwiftUI en Desarrollo iOS
02:48 min - 9

Auto Layout en iOS: Diseño Responsivo con Constraints y StackViews
11:10 min - 10

Creación y configuración de tablas en iOS con Swift
12:49 min - 11

Creación de celdas personalizadas en TableView de iOS
14:00 min - 12

Persistencia de Datos en iOS con UserDefaults
11:08 min
Manejo de dependencias
Servicios Web
Proyecto: PlatziTweets
- 19

Desarrollo de "Platzi Tweets": Red Social iOS Realista
02:24 min - 20

Configuración Inicial de Proyecto iOS con CocoaPods
06:18 min - 21

Diseño de Pantallas de Bienvenida, Inicio de Sesión y Registro en iOS
13:06 min - 22

Controladores y validaciones en pantallas de registro y login
12:22 min - 23

Validación y Conexiones en Login y Registro iOS
10:01 min - 24

Modelado de Endpoints y JSON para API de PlatziTweets
01:44 min - 25

Integración de Autenticación con API de Platzi Tweets
09:37 min - 26

Desarrollo de Registro y Autenticación en Aplicaciones iOS
06:47 min - 27

Diseño de Interfaces para Aplicaciones iOS: Creación de Celdas Personalizadas
12:37 min - 28

Consumo de API para mostrar tweets en iOS
12:43 min - 29

Diseño de Pantalla para Crear y Publicar Tweets en iOS
11:06 min - 30

Conexión de Pantalla de Publicación con Servicios de Platzi Tweets
09:11 min - 31

Borrado de Tweets Propios en iOS usando Swipe en UITableView
12:20 min - 32

Uso de la Cámara del iPhone para Adjuntar Fotos en Posts
10:39 min - 33

Conexión de Aplicaciones iOS con Firebase paso a paso
02:26 min - 34

Configuración de iPhone y X-Code para ejecución de apps
04:45 min - 35

Subida de Fotos a Firebase y Publicación en Twitter
13:38 min - 36

Configuración de Post con Imagen en Firebase
03:13 min - 37

Captura y Publicación de Videos en iOS con Firebase
09:17 min - 38

Subida de Videos a Firebase e Integración en Posts de iOS
14:41 min - 39

Configuración de Celdas para Reproducción de Videos en iOS
07:58 min - 40

Acceso al GPS y almacenamiento de coordenadas en iOS
09:43 min - 41

Integración de Mapas en iOS con Coordenadas de Usuario
11:28 min - 42

Marcadores y Configuración de Mapas en iOS con Swift
Viendo ahora - 43

Mejoras avanzadas en UI y UX para iOS Developer
01:28 min
En producción
iOS Avanzado
Hola, iOS Developer
Marcadores y Configuración de Mapas en iOS con Swift
Resumen
Configurar un mapa completo en una aplicación iOS implica dominar varios aspectos: desde el ciclo de vida de las vistas hasta la creación dinámica de marcadores con MapKit. A continuación se explican los pasos clave para lograr que un mapa muestre todos los posts geolocalizados y se posicione automáticamente en la última publicación creada.
¿Por qué el mapa no ocupa toda la pantalla al asignar tamaños programáticamente?
Cuando asignas dimensiones de forma programática dentro del método viewDidLoad, es posible que la vista aún no tenga su tamaño definitivo. Esto ocurre porque el ciclo de vida de un view controller en iOS pasa por varias etapas, y en viewDidLoad los layouts finales todavía no se han calculado por completo.
La solución es mover la configuración del mapa al método viewDidAppear [0:47]. En este punto del ciclo de vida, la pantalla ya se mostró al usuario y todas las dimensiones están resueltas. Así, al ejecutar mapContainer.bounds, se obtiene el tamaño real y el mapa ocupa la pantalla completa sin márgenes indeseados.
¿Cómo pasar datos entre pantallas usando prepare for segue?
Para que la pantalla del mapa reciba el listado de posts, es necesario pasar parámetros entre view controllers. En proyectos con storyboards, el método indicado es prepare(for segue:) [2:55].
¿Qué validaciones se deben hacer dentro del segue?
- Asignar un identificador al segue desde el storyboard, por ejemplo
showMap[3:21]. - Validar que el
segue.identifiercoincida con el esperado. - Castear
segue.destinational tipo del controlador destino, en este casoMapViewController[3:50].
Dentro de ese bloque seguro, se asignan los posts filtrados. Aquí entra en juego la programación funcional con el método filter [4:42]: se filtran únicamente los posts que tengan ubicación mediante la propiedad hasLocation. El operador $0 representa cada elemento del arreglo durante la iteración, lo que permite escribir el filtro de manera concisa.
¿Cómo organizar el código con extensiones y marks?
Una buena práctica es separar la lógica de navegación en una extensión del view controller y usar un // MARK: - Navigation [2:30]. Esto mantiene el código organizado y facilita la búsqueda con el atajo Command + Shift + O, que abre el buscador rápido de archivos del proyecto.
¿Cómo crear marcadores dinámicos y posicionar la cámara del mapa?
Con los posts ya disponibles en el MapViewController, se crea una función setupMarkers que itera sobre ellos con forEach [5:30].
Para cada post se realiza lo siguiente:
- Crear una instancia de MKPointAnnotation, que representa el marcador en el mapa [5:50].
- Asignarle una coordenada con
CLLocationCoordinate2D, extrayendolatitudeylongitudedel post [6:15]. - Establecer el
titledel marcador con el texto del tuit y elsubtitlecon el nombre del autor [6:50]. - Agregar la anotación al mapa con
map.addAnnotation(marker)[7:10].
¿Cómo centrar el mapa en el último post creado?
Para que el mapa no aparezca en una ubicación genérica, se obtiene el último elemento del arreglo con posts.last [8:40]. Con esa coordenada se configura un MKMapCamera que acepta parámetros como:
- lookingAtCenter: la coordenada donde arranca la cámara.
- distance: el nivel de zoom, por ejemplo 30 puntos [9:25].
- pitch: la inclinación, que puede dejarse en cero.
- heading: la dirección en grados, como 12 grados de rotación [9:35].
Es importante que el heading se desenvuelva con guard let en lugar de forzar el valor opcional [9:50]. En Swift, forzar valores opcionales es una mala práctica porque puede provocar un crash. Usar guard let garantiza que el código sea seguro y que la aplicación continúe funcionando sin interrupciones.
Ajustar estos valores te permite controlar exactamente qué tan cerca o lejos aparece el mapa al abrirse. Experimenta con la distancia y el heading hasta encontrar la vista ideal para tu caso de uso.
Con estos pasos ya tienes una funcionalidad de mapa completa: obtención de ubicación, marcadores dinámicos y posicionamiento de cámara. MapKit ofrece muchas más posibilidades como trazar líneas entre calles, definir radios de cobertura o personalizar las anotaciones. ¿Qué otra funcionalidad de mapas te gustaría implementar en tu proyecto?