Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'applicazione che verrà compilata in questa procedura dettagliata è illustrata di seguito:
Per iniziare, creare un nuovo progetto vuoto iOS e assegnargli un nome pertinente. Si inizierà aggiungendo codice al controller di visualizzazione per visualizzare MapView e verranno quindi create nuove classi per MapDelegate e le annotazioni personalizzate. A questo scopo, seguire questa procedura:
ViewController
Aggiungere gli spazi dei nomi seguenti a
ViewController:using MapKit; using CoreLocation; using UIKit using CoreGraphicsAggiungere una
MKMapViewvariabile di istanza alla classe insieme a un'istanzaMapDelegatedi . Si creerà l'oggettoMapDelegatea breve:public partial class ViewController : UIViewController { MKMapView map; MapDelegate mapDelegate; ...Nel metodo del
LoadViewcontroller aggiungere eMKMapViewimpostarlo sullaViewproprietà del controller:public override void LoadView () { map = new MKMapView (UIScreen.MainScreen.Bounds); View = map; }Successivamente, aggiungeremo il codice per inizializzare la mappa nel metodo 'ViewDidLoad'' .
In
ViewDidLoadaggiungere il codice per impostare il tipo di mappa, visualizzare la posizione dell'utente e consentire lo zoom e la panoramica:// change map type, show user location and allow zooming and panning map.MapType = MKMapType.Standard; map.ShowsUserLocation = true; map.ZoomEnabled = true; map.ScrollEnabled = true;Aggiungere quindi il codice al centro della mappa e impostarlo nell'area:
double lat = 30.2652233534254; double lon = -97.73815460962083; CLLocationCoordinate2D mapCenter = new CLLocationCoordinate2D (lat, lon); MKCoordinateRegion mapRegion = MKCoordinateRegion.FromDistance (mapCenter, 100, 100); map.CenterCoordinate = mapCenter; map.Region = mapRegion;Creare una nuova istanza di
MapDelegatee assegnarla all'oggettoDelegateMKMapViewdi . Anche in questo caso, si implementerà aMapDelegatebreve:mapDelegate = new MapDelegate (); map.Delegate = mapDelegate;A partire da iOS 8, è necessario richiedere l'autorizzazione dell'utente per usare la propria posizione, quindi è possibile aggiungerla all'esempio. Per prima cosa, definire una
CLLocationManagervariabile a livello di classe:CLLocationManager locationManager = new CLLocationManager();ViewDidLoadNel metodo si vuole verificare se il dispositivo che esegue l'applicazione usa iOS 8 e, se è necessario richiedere l'autorizzazione quando l'app è in uso:if (UIDevice.CurrentDevice.CheckSystemVersion(8,0)){ locationManager.RequestWhenInUseAuthorization (); }Infine, è necessario modificare il file Info.plist per consigliare agli utenti il motivo della richiesta della loro posizione. Nel menu Origine di Info.plist aggiungere la chiave seguente:
NSLocationWhenInUseUsageDescriptione stringa:
Maps Walkthrough Docs Sample.
ConferenceAnnotation.cs : classe per annotazioni personalizzate
Verrà usata una classe personalizzata per l'annotazione denominata
ConferenceAnnotation. Aggiungere la classe seguente al progetto:using System; using CoreLocation; using MapKit; namespace MapsWalkthrough { public class ConferenceAnnotation : MKAnnotation { string title; CLLocationCoordinate2D coord; public ConferenceAnnotation (string title, CLLocationCoordinate2D coord) { this.title = title; this.coord = coord; } public override string Title { get { return title; } } public override CLLocationCoordinate2D Coordinate { get { return coord; } } } }
ViewController - Aggiunta dell'annotazione e della sovrimpressione
Con il
ConferenceAnnotationposto è possibile aggiungerlo alla mappa. Tornare alViewDidLoadmetodo diViewController, aggiungere l'annotazione alla coordinata centrale della mappa:map.AddAnnotations (new ConferenceAnnotation ("Evolve Conference", mapCenter));Vogliamo anche avere una sovrimpressione dell'hotel. Aggiungere il codice seguente per creare usando
MKPolygonle coordinate per l'hotel fornito e aggiungerlo alla mappa chiamandoAddOverlay:// add an overlay of the hotel MKPolygon hotelOverlay = MKPolygon.FromCoordinates( new CLLocationCoordinate2D[]{ new CLLocationCoordinate2D(30.2649977168594, -97.73863627705), new CLLocationCoordinate2D(30.2648461170005, -97.7381627734755), new CLLocationCoordinate2D(30.2648355402574, -97.7381750192576), new CLLocationCoordinate2D(30.2647791309417, -97.7379872505988), new CLLocationCoordinate2D(30.2654525150319, -97.7377341711021), new CLLocationCoordinate2D(30.2654807195004, -97.7377994819399), new CLLocationCoordinate2D(30.2655089239607, -97.7377994819399), new CLLocationCoordinate2D(30.2656428950368, -97.738346460207), new CLLocationCoordinate2D(30.2650364981811, -97.7385709662122), new CLLocationCoordinate2D(30.2650470749025, -97.7386199493406) }); map.AddOverlay (hotelOverlay);
In questo modo viene completato il codice in ViewDidLoad. A questo punto è necessario implementare la MapDelegate classe per gestire la creazione rispettivamente delle visualizzazioni di annotazione e sovrapposizione.
MapDelegate
Creare una classe denominata
MapDelegateche eredita daMKMapViewDelegatee includere unaannotationIdvariabile da usare come identificatore di riutilizzo per l'annotazione:class MapDelegate : MKMapViewDelegate { static string annotationId = "ConferenceAnnotation"; ... }In questo caso è disponibile una sola annotazione, quindi il codice di riutilizzo non è strettamente necessario, ma è consigliabile includerlo.
Implementare il
GetViewForAnnotationmetodo per restituire una vista per l'usoConferenceAnnotationdell'immagine conference.png inclusa in questa procedura dettagliata:public override MKAnnotationView GetViewForAnnotation (MKMapView mapView, NSObject annotation) { MKAnnotationView annotationView = null; if (annotation is MKUserLocation) return null; if (annotation is ConferenceAnnotation) { // show conference annotation annotationView = mapView.DequeueReusableAnnotation (annotationId); if (annotationView == null) annotationView = new MKAnnotationView (annotation, annotationId); annotationView.Image = UIImage.FromFile ("images/conference.png"); annotationView.CanShowCallout = true; } return annotationView; }Quando l'utente tocca l'annotazione, si vuole visualizzare un'immagine che mostra la città di Austin. Aggiungere le variabili seguenti a per l'immagine
MapDelegatee la visualizzazione per visualizzarla:UIImageView venueView; UIImage venueImage;Successivamente, per visualizzare l'immagine quando viene toccata l'annotazione, implementare il
DidSelectAnnotationmetodo come segue:public override void DidSelectAnnotationView (MKMapView mapView, MKAnnotationView view) { // show an image view when the conference annotation view is selected if (view.Annotation is ConferenceAnnotation) { venueView = new UIImageView (); venueView.ContentMode = UIViewContentMode.ScaleAspectFit; venueImage = UIImage.FromFile ("image/venue.png"); venueView.Image = venueImage; view.AddSubview (venueView); UIView.Animate (0.4, () => { venueView.Frame = new CGRect (-75, -75, 200, 200); }); } }Per nascondere l'immagine quando l'utente deseleziona l'annotazione toccando un'altra posizione sulla mappa, implementare il
DidDeselectAnnotationViewmetodo come indicato di seguito:public override void DidDeselectAnnotationView (MKMapView mapView, MKAnnotationView view) { // remove the image view when the conference annotation is deselected if (view.Annotation is ConferenceAnnotation) { venueView.RemoveFromSuperview (); venueView.Dispose (); venueView = null; } }È ora disponibile il codice per l'annotazione. Tutto ciò che rimane è aggiungere codice a
MapDelegateper creare la visualizzazione per la sovrimpressione dell'hotel.Aggiungere l'implementazione seguente di
GetViewForOverlayaMapDelegate:public override MKOverlayView GetViewForOverlay (MKMapView mapView, NSObject overlay) { // return a view for the polygon MKPolygon polygon = overlay as MKPolygon; MKPolygonView polygonView = new MKPolygonView (polygon); polygonView.FillColor = UIColor.Blue; polygonView.StrokeColor = UIColor.Red; return polygonView; }
Eseguire l'applicazione. Ora abbiamo una mappa interattiva con un'annotazione personalizzata e una sovrimpressione. Toccare l'annotazione e viene visualizzata l'immagine di Austin, come illustrato di seguito:
Riepilogo
In questo articolo è stato illustrato come aggiungere un'annotazione a una mappa e come aggiungere una sovrimpressione per un poligono specificato. È stato anche illustrato come aggiungere il supporto tocco all'annotazione per animare un'immagine su una mappa.

