Table of Contents
Dal visualizzare annotazioni e sovrapposizioni personalizzate per calcolare le direzioni e l'esecuzione di geocodifica, MapKit consente di costruire esperienze di localizzazione-consapevole che si sentono a casa su iPhone e iPad. Questa guida ti guida attraverso tutto ciò che devi sapere per integrare MapKit efficacemente, coprire l'installazione, la personalizzazione, l'ottimizzazione degli utenti, le funzioni avanzate di navigazione.
Iniziare con MapKit
Prerequisiti e configurazione del progetto
Prima di poter inserire una mappa sullo schermo, è necessario aggiungere MapKit al tuo progetto Xcode. Se stai costruendo con UIKit, semplicemente importare il framework in cima al controller di visualizzazione: import MapKit[]]. Per progetti SwiftUI, aggiungere la stessa dichiarazione di importazione al tuo file di visualizzazione. MapKit fa parte dell'installazione SDK di Apple, quindi non è necessario alcun ulteriore pacchetto.
Un passo critico sta configurando l'app Info.plist[]] per richiedere l'accesso alla posizione. MapKit si basa sui servizi di localizzazione per caratteristiche come la visualizzazione della posizione attuale dell'utente e la fornitura di indicazioni.
- SLocationWhenInUseUsageDescription[[]: Un messaggio che spiega perché la tua applicazione ha bisogno di accedere alla posizione durante l'uso.
- SlocationAlwaysAndWhenInUseUsageDescription[[]: Obbligatorio se la tua app traccia posizione sullo sfondo (ad esempio, per la navigazione a turn-by-turn).
Apple esamina queste descrizioni, quindi essere chiaro e onesto su come si utilizzano i dati di posizione. Una descrizione vaga o fuorviante può portare a rifiuto.
Richiesta di autorizzazione di posizione
Anche dopo aver aggiunto le chiavi, la tua app deve chiedere attivamente il permesso a runtime. Usa CLLocationManager] per richiedere l'autorizzazione. Chiama o ] in base alle tue esigenze. È meglio richiedere il permesso appena prima che sia necessario, non al lancio di app.
Aggiungere MapKit a UIKit e SwiftUI
In UIKit, trascina un ]MapKit View] dalla Libreria degli Oggetti sul tuo storyboard, o crea un MKMapView programmaticamente. Collegalo a uno sbocco nel tuo controller di visualizzazione.
Aggiungere una mappa Visualizza la tua App
Istantaneazione programmatica vs. Interface Builder
Interface Builder offre una soluzione rapida drag‐and-drop, ma la creazione programmatica ti dà un controllo più accurato sulla struttura della mappa e la configurazione iniziale. Se crei la mappa in codice, ricorda di chiamare addSubview( :)]] e impostare vincoli appropriati o maschera autoresizing.
Indipendentemente dal metodo, in genere si imposta la mappa delegate[] a sé in [ (per UIKit) o all'interno del UIViewRepresentable] coordinatore. Il delegato è essenziale per gestire le interazioni degli utenti e personalizzare le viste di annotazione.
Configurazione Mappa Tipo e Regione
MapKit offre diversi tipi di mappa: .standard] (cartina stradale predefinita), .satellite (immagine aerea), .hybrid] (satellite con etichette stradali), e .mutedStandard[FLT]
Per impostare la regione iniziale, creare un MKCoordinateRegion[ con una coordinata e un'estensione centrale (latitude/longitude delta).
- Centro: latitudine 40.7128, longitudine -74.0060
- Span: latitudeDelta 0.05, longitudineDelta 0.05 (circa 5-6 km).
Animare il cambiamento della regione utilizzando per un'introduzione più liscia dell'utente.Evita le campate eccessivamente piccole che forzano la mappa a caricare molte piastrelle; un livello di zoom moderato carica più velocemente.
Gestione della posizione utente
Per mostrare il punto blu dell'utente, impostare . Questo richiede automaticamente il permesso di posizione se hai aggiunto le chiavi Info.plist. È inoltre possibile centrare la mappa sulla posizione dell'utente ascoltando il MKMapViewDelegate]] metodo ].
Per una maggiore precisione o aggiornamenti di sfondo, combinare MapKit con [CLLocationManager[[] direttamente e inserire le coordinate nella mappa.
Personalizzazione della mappa con Annotazioni e Sovrapposizioni
Creazione di annunci personalizzati
[FLT:]] [[FLT:]]] [[FLT:]]]] ]]] ]] ]] ]] [FLT:]]] [FLT]]]] [FLT]]]][[FLT]]]]]]][[[[[[[[[FLT]]]]]]]]]]]]]]]]]]]]]]]]]]]][[[[[[[[[[[[[[[[[[[[[[[[[[[[[FLT]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
Per il pieno controllo, creare una classe che si conformi al protocollo [[]MKAnnotation[[]].Potetete quindi memorizzare ulteriori proprietà (come un documento o un rating) e usarli per costruire una visione più ricca di annotazioni.Questo approccio è particolarmente utile quando ogni annotazione deve guardare diversi o portare dati aggiuntivi per i callout.
Designing annunci
[LT] ], decidi una visualizzazione dell'annotazione riutilizzabile, quindi configuralo. Se hai bisogno di un colore pin diverso, usa MKPinAnnotationView] con e Per un'immagine personalizzata, usa MKAnnotationView[FLT][F:[F]
Per un pulsante di dettaglio, impostare e gestire il rubinetto in . Questo modello consente agli utenti di perforare più informazioni su una posizione.
Aggiungere overlays
Gli overlays sono forme disegnate sulla mappa: cerchi, poliline e poligoni. Usa MKCircle[] per evidenziare un raggio intorno a un punto (ad esempio, una zona di consegna). MKPolyline[]] traccia un percorso (ad esempio, un percorso di riempimento).
[[FLT:]] [[FLT:]]] ] MKCircleRenderer, [FLT:[FLT]][[[FLT]]]]][[FLT]]]]
Suggerimento: Se si dispone di molti sovrapposizioni, si consideri raggrupparli in un unico sovrapposizione che copre una grande area e modelli di disegno programmaticamente, riducendo il numero di rendering e migliora la velocità del telaio.
Gestione dell'interazione utente
Implementare il Delegato
Il controller di visualizzazione (o coordinatore) deve essere conforme a [MKMapViewDelegate[[]. Impostare la proprietà del delegato della mappa, quindi implementare i metodi di cui hai bisogno.
- : Chiamato dopo che l'utente finisce di panning o zoom. Utilizzalo per caricare nuove annotazioni o aggiornare i dati per la regione visibile.
- : Fuoco quando viene premuto un annotazione, è possibile aggiornare un pannello di dettaglio o registrare quale posizione è stata selezionata.
- : Obbligatorio per fornire opinioni di annotazione, come detto sopra.
- : Richiesto per il rendering overlay.
Non dimenticate di rimuovere il delegato in (UIKit) o quando la vista scompare per evitare callback orfani.
Rispondendo a Pan, Zoom e Selezione di Annotazione
MapKit gestisce i gesti della padella e zoom per impostazione predefinita. Puoi limitare i livelli di zoom impostando [cameraZoomRange[ (iOS 13+) per limitare lo zoom massimo e minimo della mappa. Ad esempio, un cercatore di ristorante potrebbe voler evitare di zoomare troppo lontano.
Quando un utente seleziona un annotazione, il callout viene visualizzato automaticamente se configurato. Puoi anche eseguire animazioni personalizzate: ad esempio, ingrandisci l'annotazione selezionata quando viene premuto. Usa [ o ] per transizioni lisce.
Aggiornamento dell'interfaccia utente Basato su eventi della mappa
Combina con un'operazione di ricerca o di fetch. Ad esempio, come l'utente scorre, è possibile query un server per punti di interesse all'interno del nuovo rettangolo visibile.
Caratteristiche avanzate
Come arrivare con MKDirections
MapKit può calcolare la guida, camminare, transitare e le indicazioni per il ciclismo utilizzando MKDirections. In primo luogo, creare un MKDirections.Request con la fonte e la destinazione MKMapItem oggetti.
[FLT-Arricchimento] [[FLT]]] ]MKRoute]] oggetti. Ogni percorso ha una polilina, che è possibile aggiungere come un sovrapposizione alla mappa. È inoltre possibile visualizzare passi di svolta attraverso iterazione [FLT-4]
Geocodifica inversa con CLGeocoder
Mentre MapKit gestisce geocodifica in avanti (indirizzo per coordinate) attraverso CLGeocoder[], geocodifica inversa (coordinate per affrontare) è altrettanto utile.
La geocodifica inversa è limitata a tasso da Apple, quindi evita di chiamarla su ogni selezione di annotazioni. I risultati di Cache localmente (ad esempio, in un dizionario chiave per coordinate).Per un uso pesante, consideri Apple MapKit JS geocodifica lato server o un provider di terze parti.
Combinando MapKit con Core Location per aggiornamenti in tempo reale
Per il monitoraggio dal vivo (ad esempio, posizione del driver di consegna), utilizzare [CLLocationManager] per ricevere aggiornamenti continui, quindi aggiornare un'annunziazione che rappresenta l'utente.
Aggiornare la proprietà coordinata dell'annotazione direttamente: . MapKit aggiorna automaticamente la posizione di visualizzazione. Per ruotare l'annotazione in base al corso, impostare . Per un indicatore di voce liscia, ascoltare locationManager( :didUpdateHeading:)] e ruotare la mappa di conseguenza.
Prestazioni e migliori pratiche
Gestione della memoria con grandi numeri di annotazioni
Aggiungendo centinaia di annotazioni senza ottimizzazione può rallentare la mappa e causare la pressione della memoria. Applicare sempre con dequeuing (simile a vista della tabella).
Per i set di dati veramente massicci (migliaia di punti), considerare l'utilizzo ]annotazione clustering. MapKit supporta clustering attraverso MKClusterAnnotation e il clusteringIdentifier] proprietà
Ottimizzazione del rendering overlay
Se avete molti piccoli sovrapposizioni (ad esempio, piastrelle), unirli in un singolo MKTileOverlay[] o MKGroundOverlay[]]. Per sovrapposizioni dinamiche che cambiano spesso (come una mappa di calore), considerare l'uso [KOFver:4F
Quando la mappa si muove, i sovrapposizioni vengono resi al nuovo livello di zoom. Per forme complesse, semplificare la geometria a livelli di zoom inferiori. È possibile regolare il [lineWidth[[[FLT: 1:3]] e ] alpha] dinamicamente basato su ]] per mantenere il rendering fresco senza sovradimensionamento.
Gestione delle risorse e dei licenze
MapKit utilizza i server di piastrelle della mappa di Apple, inclusi nel programma di sviluppo. Tuttavia, è necessario rispettare i dati della mappa di Apple MapKit Guida all'uso. Ad esempio, non è possibile estrarre i dati della mappa per l'uso al di fuori del quadro, e è necessario visualizzare le note di attribuzione (Applicare lo fa già per impostazione predefinita).
Per le mappe offline, MapKit non supporta il caching delle piastrelle in nativo. Considerate l'utilizzo MapKit] incorporato comportamento di cache delle piastrelle (è la cache di alcune piastrelle), ma per la funzionalità offline garantita, potreste dover usare un'alternativa come Mapbox] o [FLT[Map:4] OpenStreet'F
Conclusioni
MapKit offre agli sviluppatori iOS un set incredibilmente ricco di strumenti per la costruzione di interfacce basate su dati di posizione senza contare su servizi di terze parti. Dai pin di base e sovrapposizioni alle indicazioni di percorso complete e alle annotazioni in tempo reale, il framework copre la maggior parte delle esigenze di mappatura.
Per continuare a imparare, fare riferimento al ufficiale Apple MapKit Documentation ed esplorare progetti di esempio come MapCallouts. Per un'immersione più profonda in annotazioni e sovrapposizioni, le Raywenderlich MapKit esercitazioni offre risorse pratiche