MapKit + SwiftUI (Parte 5 de 8)
1Explorando MapKit en SwiftUI
2Cómo referenciar lugares con Place ID
3Seleccionar marcadores y anotaciones de MapKit en SwiftUI
4Overlays con MapKit y SwiftUI
5Cómo interactuar con MapFeature en SwiftUI
6Cómo configurar controles de un mapa con MapKit y SwiftUI
7Explorando lugares con LookAroundPreview
8Mostrar datos de un lugar con Place Card
Cómo interactuar con MapFeature en SwiftUI
Misael Cuevas
21 febrero, 20243min de lectura
MapFeature
es una struct
que representa puntos conocidos en un mapa, como hoteles, restaurantes, parques, playas, montañas, entre otros. Si agregas la vista Map
y navegas hacia algún lugar, como por ejemplo una ciudad, podrás observar cómo se muestran puntos conocidos (MapFeature
):
Por defecto, se muestran en el mapa, pero si seleccionas alguno, no sucede nada. En este artículo aprenderás cómo interactuar con ellos.
Seleccionar un MapFeature
Para empezar a interactuar con un MapFeature
, debes habilitar la selección de este mediante el parámetro selection
de la vista Map
. Ejemplo:
import SwiftUIimport MapKitstruct ContentView: View {// 1@State private var selectedFeature : MapFeature?var body: some View {// 2Map(selection: $selectedFeature)}}
- Se define la variable de estado
selectedFeature
para conocer elMapFeature
seleccionado en el mapa. - Se agrega la vista
Map
que utiliza la variableselectedFeature
.
Gracias a estas pocas líneas de código, MapKit
nos presenta un Marker
animado al seleccionar un MapFeature
.
Personalizar presentación
Es posible modificar el Marker
por defecto que nos brinda MapKit
por otro Marker
o Annotation
personalizado al gusto gracias al modificador mapFeatureSelectionContent
de la vista Map
:
func mapFeatureSelectionContent(@MapContentBuilder content: @escaping (MapFeature) -> some MapContent) -> some View
Este modificador cuenta con el parámetro content
, que es un closure donde provee información del MapFeature
seleccionado y requiere que se retorne un Marker
o Annotation
. Por ejemplo:
Map(selection: $selectedFeature).mapFeatureSelectionContent { feature inif feature.pointOfInterestCategory == .hotel {Marker("😴", coordinate: feature.coordinate)} else {EmptyMapContent()}}
En este ejemplo, los MapFeature
que pertenecen a la categoría hotel se presentarán con un Marker
con un emoji; de lo contrario, se mostrará la vista EmptyMapContent()
. La vista EmptyMapContent
se utiliza para indicar que no contiene ningún tipo de contenido, y al utilizarlo dentro del modificador mapFeatureSelectionContent
, se mostrará el Marker
por defecto que viste en el ejemplo anterior.
Si deseas conocer más sobre lo que es un Closure y como dominarlos, te recomiendo este artículo en nuestro blog.
Otro modificador al que puedes hacer uso es mapFeatureSelectionDisabled
para manejar cuándo un MapFeature
puede ser seleccionado. Ejemplo:
Map(selection: $selectedFeature).mapFeatureSelectionDisabled { feature infeature.pointOfInterestCategory == .hotel ? true : false}
En este ejemplo, no está permitido la selección de MapFeature
que pertenecen a la categoría hotel.
Propiedades de MapFeature
La estructura MapFeature
contiene propiedades que son muy útiles cuando se desea personalizar contenidos de un mapa (durante este artículo utilizaste la propiedad pointOfInterestCategory
). Estas son:
kind
: El tipo que representa que pueden ser un punto de interés, físico o territorio.coordinate
: Sus coordenadas (latitud y longitud).title
: El nombre delMapFeature
seleccionado del mapa.backgroundColor
: El color de fondo asociado.image
: La imagen asociada como lo puede ser unSFSymbol
.pointOfInterestCategory
: La categoría a la que pertenece como puede ser un hotel, banco, aeropuerto, hospital, entre otros.
MapKit + SwiftUI (Parte 5 de 8)
1Explorando MapKit en SwiftUI
2Cómo referenciar lugares con Place ID
3Seleccionar marcadores y anotaciones de MapKit en SwiftUI
4Overlays con MapKit y SwiftUI
5Cómo interactuar con MapFeature en SwiftUI
6Cómo configurar controles de un mapa con MapKit y SwiftUI
7Explorando lugares con LookAroundPreview
8Mostrar datos de un lugar con Place Card