Le framework MapKit d'Apple fournit aux développeurs iOS une solution robuste et native pour intégrer des cartes interactives dans leurs applications. De l'affichage d'annotations et de superpositions personnalisées au calcul des directions et au géocodage, MapKit vous permet de créer des expériences de localisation qui se sentent bien chez vous sur iPhone et iPad. Ce guide vous permet de découvrir tout ce que vous devez savoir pour intégrer MapKit efficacement, couvrant la configuration, la personnalisation, l'interaction utilisateur, les fonctionnalités avancées et l'optimisation des performances.

Commencer avec MapKit

Prérequis et mise en place du projet

Avant de pouvoir placer une carte à l'écran, vous devez ajouter MapKit à votre projet Xcode. Si vous construisez avec UIKit, il suffit d'importer le cadre en haut de votre contrôleur de vue : Import MapKit. Pour les projets SwiftUI, ajoutez la même instruction d'importation à votre fichier de vue. MapKit fait partie du SDK d'Apple, donc aucune installation de paquet supplémentaire n'est nécessaire.

Une étape critique consiste à configurer l'information de votre application.Info.plist pour demander l'accès à l'emplacement. MapKit compte sur les services d'emplacement pour des fonctionnalités telles que la représentation de l'emplacement actuel de l'utilisateur et la fourniture de directions.

  • NSLocationWhenInUseUsageDescription: Un message expliquant pourquoi votre application a besoin d'accéder à l'emplacement pendant son utilisation.
  • NSLocationAlwaysAndWhenInUseDescription d'utilisation: Requis si votre application suit l'emplacement dans l'arrière-plan (p. ex. pour la navigation tour par tour).

Apple examine ces descriptions, donc être clair et honnête sur la façon dont vous utilisez les données de localisation. Une description vague ou trompeuse peut conduire au rejet.

Demande de permis d'emplacement

Même après avoir ajouté les clés, votre application doit demander activement la permission à l'exécution. Utilisez CLLocationManager pour demander l'autorisation. Appelez ou en fonction de vos besoins. Il est préférable de demander la permission juste avant qu'elle ne soit nécessaire, pas au lancement de l'application. Un modèle commun est d'appeler la méthode lorsque l'utilisateur interagit d'abord avec une fonction liée à la carte. Après que l'utilisateur accorde ou refuse l'autorisation, le système peut les inviter à nouveau seulement après une certaine période, donc gérer les modifications gracieusement dans votre .

Ajouter MapKit à l'UIKit et SwiftUI

Dans UIKit, faites glisser un MapKit View[ de la bibliothèque d'objets sur votre storyboard, ou créez un MKMapView[ programmatiquement. Connectez-le à une prise dans votre contrôleur de vue. Pour SwiftUI, utilisez Map[ (introduit dans iOS 17) ou wrap MKMapView[ avec UIViewReprésentable pour les versions antérieures. Les deux approches vous donnent un accès complet aux capacités de MapKit sous-jacentes.

Ajout d'une vue de carte à votre application

Instantiation programmatique vs Constructeur d'Interface

Interface Builder offre une solution rapide de glisser-déposer, mais la création programmatique vous donne un contrôle plus fin sur le cadre et la configuration initiale de la carte. Si vous créez la carte en code, n'oubliez pas d'appeler addSubview( :) et de définir des contraintes appropriées ou des masques autoressizeurs.

Quelle que soit la méthode, vous définirez généralement le delegate de la carte à vous-même dans (pour UIKit) ou à l'intérieur du [UIViewReprésentable coordinator. Le délégué est essentiel pour gérer les interactions utilisateur et personnaliser les vues d'annotation.

Configuration du type de carte et de la région

MapKit offre plusieurs types de cartes : .standard[ (carte de rue par défaut), .satellite[ (imagerie aérienne), .hybrid[ (satellite avec étiquettes routières), et .mutedStandard (couleurs subdues pour les superpositions).

Pour définir la région initiale, créez une MKCoordinatorRegion avec une coordination centrale et une portée (latitude/longitude delta).

  • Centre: 40,7128, longitude -74.0060
  • Panoplie : latitudeDelta 0,05, longitudeDelta 0,05 (environ 5 à 6 km).

Animer le changement de région en utilisant pour une introduction utilisateur plus fluide. Éviter les petites travées qui forcent la carte à charger de nombreuses tuiles; un niveau de zoom modéré se charge plus rapidement.

Gestion de l'emplacement de l'utilisateur

Pour afficher le point bleu de l'utilisateur, définissez . Cela demande automatiquement la permission de l'emplacement si vous avez ajouté les touches Info.plist. Vous pouvez également centrer la carte sur l'emplacement de l'utilisateur en écoutant la méthode MKMapViewDelegate . Attention à ne pas centrer à plusieurs reprises si l'utilisateur s'éloigne; un motif commun est de fournir un bouton « retour à mon emplacement ».

Pour une plus grande précision ou des mises à jour de fond, combinez MapKit avec CLLocationManager[ directement et les coordonnées de flux dans la carte. Le service de localisation intégré de MapKit est suffisant pour la plupart des cas d'utilisation et simplifie le code.

Personnaliser la carte avec les annotations et les superpositions

Création d'annotations personnalisées

La façon la plus simple de placer une broche est d'utiliser MKPointAnnotation[.Définir son titre, sous-titre et coordonné. Ajoutez-la via et elle apparaît avec la broche rouge par défaut. Pour personnaliser la couleur de la broche ou la remplacer par une image personnalisée, vous devez fournir une MKAnnotationView dans la méthode de délégation .

Pour le contrôle complet, créez une classe qui soit conforme au protocole MKAnnotation. Vous pouvez ensuite stocker des propriétés supplémentaires (comme un ID ou une notation) et les utiliser pour construire une vue d'annotation plus riche. Cette approche est particulièrement utile lorsque chaque annotation doit être différente ou transporter des données supplémentaires pour les appels.

Conception des vues d'annotation

Dans , débranchez une vue d'annotation réutilisable, puis configurez-la. Si vous avez seulement besoin d'une couleur d'une broche différente, utilisez MKPinAnnotationView[ avec et . Pour une image personnalisée, utilisez MKAnnotationView[ et définissez sa propriété image.

Vous pouvez également ajouter des vues accessoires de callout gauche/droite (par exemple, une image miniature ou un bouton de détail). Pour un bouton de détail, définissez et manipulez le bouton . Ce modèle permet aux utilisateurs de percer vers le bas dans plus d'informations sur un emplacement.

Ajout de superpositions

Les recouvrements sont des formes dessinées sur la carte : cercles, polylignes et polygones. Utilisez MKCircle pour mettre en évidence un rayon autour d'un point (p. ex., une zone de livraison). MKPolyline[ dessine un sentier (p. ex., un sentier de randonnée). MKPolygon remplit une zone (p. ex., une limite du parc).

Pour effectuer une superposition, implémenter . Retourner un MKOverlayRenderer sous-classe: MKCircleRenderer[, MKPolylineRenderer[, ou MKPolygonRenderer. Personnaliser les couleurs de course/remplissement, la largeur de la ligne et l'alpha. Pour une polyligne en tirets, set . Les superpositions peuvent être ajoutées en lots en utilisant pour la performance.

Astuce : Si vous avez de nombreuses superpositions, envisagez de les regrouper en une seule superposition qui couvre une grande zone et dessine les motifs programmatiques. Cela réduit le nombre de rendus et améliore le taux de trame.

Traitement de l'interaction utilisateur

Mise en œuvre du délégué

Votre contrôleur de vue (ou coordonnateur) doit se conformer à MKMapViewDelegate. Définissez la propriété de délégué de la carte, puis implémentez les méthodes dont vous avez besoin.

  • : Appelé après que l'utilisateur ait terminé le panoramique ou le zoom. Utilisez-le pour charger de nouvelles annotations ou rafraîchir les données pour la région visible.
  • : Feu lorsqu'une annotation est tapée. Vous pouvez mettre à jour un panneau de détails ou un journal de l'emplacement sélectionné.
  • : Obligatoire pour fournir des vues sur l'annotation, comme mentionné ci-dessus.
  • : Requis pour le rendu de recouvrement.

N'oubliez pas de supprimer le délégué dans (UIKit) ou lorsque la vue disparaît pour éviter les rappels orphelins.

Répondre à la sélection Pan, Zoom et Annotation

MapKit gère les gestes de panoramique et de zoom par défaut. Vous pouvez limiter les niveaux de zoom en définissant cameraZoomRange (iOS 13+) pour limiter le zoom maximum et minimum de la carte. Par exemple, un chercheur de restaurant pourrait vouloir éviter de zoomer trop loin.

Lorsque l'utilisateur sélectionne une annotation, l'appel apparaît automatiquement si configuré. Vous pouvez également effectuer des animations personnalisées : par exemple, zoomer sur l'annotation sélectionnée lorsque tapotée. Utilisez ou pour des transitions lisses. Attention à ne pas combattre le geste actuel de l'utilisateur ; animez seulement après la sélection, pas pendant un glisser.

Mise à jour de l'interface utilisateur basée sur les événements cartographiques

Combinez avec une opération de recherche ou de récupération. Par exemple, lorsque l'utilisateur défile, vous pouvez interroger un serveur pour trouver des points d'intérêt dans le nouveau rectangle visible. Utilisez MKMapRect[ méthodes () pour déterminer les coordonnées de délimitation. Pour éviter les appels réseau excessifs, débonfler ou actionner : attendez 200ms après que la région change se termine avant de lancer une requête. Cela assure une application réactive sans surcharger le serveur.

Caractéristiques avancées

Obtenir des directions avec MKDirections

MapKit peut calculer les directions de conduite, de marche, de transit et de vélo en utilisant MKDirections.D'abord, créer un MKDirections.Demande avec la source et la destination MKMapItem[ objets.

Appeler . La réponse contient un tableau d'objets MKRoute. Chaque itinéraire a une polyline, que vous pouvez ajouter comme superposition à la carte. Vous pouvez également afficher des étapes de virage par virage en passant par route.steps[ et les montrer dans une vue de table. Pour la navigation, MapKit[ ne fournit pas de guidages vocaux tour par tour; envisager d'utiliser CarPlay[ ou de passer à MapKit JS[[] pour le web ou la plateforme croisée. Néanmoins, les demandes de direction sont simples et peuvent enrichir toute application qui nécessite la planification de parcours.

Inverser le géocodage avec CLGeocoder

Alors que MapKit gère le géocodage vers l'avant (adresse aux coordonnées) par CLGeocoder[, le géocodage vers l'arrière (coordonnées à l'adresse) est également utile. Utilisez avec un objet CLLocation[. Le gestionnaire d'achèvement retourne un tableau de CLPlacemark[ objets contenant des rues, des villes, des pays et plus.

Le géocodage inverse est limité par Apple, donc évitez de l'appeler sur chaque sélection d'annotation. Cache donne des résultats locaux (p. ex. dans un dictionnaire codé par coordonnées). Pour une utilisation lourde, considérez le géocodage côté serveur MapKit JS d'Apple ou un fournisseur tiers.

Combiner MapKit et l'emplacement de base pour les mises à jour en temps réel

Pour le suivi en direct (p. ex., la position d'un conducteur de livraison), utilisez CLLocationManager[ pour recevoir des mises à jour continues, puis mettez à jour une annotation représentant l'utilisateur. Réglez à kCLLocationAccuracyN°1ForNavigation et à .automotiveNavigation[ pour une performance optimale de la batterie.

Mettre à jour la propriété de coordonnées de l'annotation directement : . MapKit met automatiquement à jour la position de vue. Pour faire tourner l'annotation en fonction du cours, définissez . Pour un indicateur de cap en douceur, écoutez locationManager( :didUpdateHeading:) et faites tourner la carte en conséquence.

Performance et pratiques exemplaires

Gestion de la mémoire avec un grand nombre d'annotations

Ajouter des centaines d'annotations sans optimisation peut ralentir la carte et causer une pression de mémoire. Implémentez toujours avec la commande de démarchage (similaire aux vues de table). Réutilisez les vues d'annotation en définissant un correspondant à la commande de réutilisation.

Pour des ensembles de données réellement massifs (en milliers de points), envisagez d'utiliser annotation clustering[. MapKit prend en charge le clustering via MKClusterAnnotation[ et la propriété clusteringIdentifier[ sur MKAnnotationView[. Assignez le même identificateur aux annotations qui devraient être regroupées, et implémentez pour créer une vue d'annotation cluster personnalisée qui affiche un nombre. Le regroupement réduit considérablement le nombre de vues visibles et améliore la performance.

Optimisation du rendu des recouvrements

Chaque superposition obtient son propre rendu. Si vous avez beaucoup de petites superpositions (par exemple, des tuiles), fusionnez-les en un seul MKTileOverlay[ ou MKGroundOverlay. Pour les superpositions dynamiques qui changent fréquemment (comme une carte de chaleur), envisagez d'utiliser MKOverlayRenderer pour mettre à jour le contenu efficacement.

Lorsque la carte se déplace, les recouvrements sont rendus au niveau du nouveau zoom. Pour les formes complexes, simplifiez la géométrie aux niveaux de zoom inférieurs. Vous pouvez ajuster la lineWidth et alpha dynamiquement en fonction de pour continuer à rendre croquant sans trop-déroulement.

Traitement des ressources cartographiques et des licences

MapKit utilise les serveurs de carrelage d'Apple, qui sont inclus dans l'adhésion de votre programme développeur. Cependant, vous devez respecter les lignes directrices d'utilisation d'Apple . Par exemple, vous ne pouvez pas extraire les données de carte pour une utilisation en dehors du cadre, et vous devez afficher des avis d'attribution (Apple le fait déjà par défaut).

Pour les cartes hors ligne, MapKit ne supporte pas les carreaux de cache nativement. Envisagez d'utiliser MapKit un comportement de cache de carrelage intégré (il cache certaines tuiles), mais pour une fonctionnalité hors ligne garantie, vous pouvez avoir besoin d'utiliser une alternative comme Mapbox[ ou OpenStreetMap avec pré-chargement de carrelage.

Conclusion

MapKit offre aux développeurs iOS un ensemble d'outils incroyablement riche pour construire des interfaces de localisation-concept sans compter sur des services tiers. Des broches de base et des superpositions aux directions de route complètes et aux annotations en temps réel, le cadre couvre la majorité des besoins de cartographie. En suivant les étapes de configuration, en utilisant les méthodes de délégation et en appliquant des optimisations de performance comme le regroupement, vous pouvez créer des cartes qui se sentent rapides, réactives et profondément intégrées à la fonctionnalité de votre application.

Pour poursuivre l'apprentissage, reportez-vous au document officiel Apple MapKit Documentation[ et explorez des projets-échantillons comme MapCallouts.Pour une plongée plus profonde dans les annotations et les superpositions, le tutoriel Raywenderlich MapKit[ propose des exercices pratiques.