Nuove funzionalità Mapkit in iOS 11New Funzionalità in Mapkit su iOS 11

  • 08/08/2017
  • Tempo di lettura: 4 minuti
    • d
    • o

Li>

iOS 11 Aggiungi le seguenti nuove funzionalità da MAPKIT: iOS 11 Aggiunge le seguenti nuove funzionalità da MAPKIT:

  • cluster clustering cluster clustering
  • Pulsante pulsante Compass
  • Visualizza vista Visualizzazione
  • pulsante di tracciamento del pulsante di tracciamento utilizzato

Mappa che mostra i marcatori raggruppati e Il pulsante Compass

indicatori di gruppo automaticamente quando si effettuano i marcatori di raggruppamento zomautualmente durante lo zoom

example mapkit “tandm” mostra come implementare la nuova funzionalità di clinching di iOS 11.Il mapkit di esempio Esempio di “tandm” mostra come implementare il nuovo Funzione di clustering di annotazione IOS 11

1. Creare una sottoclasse mkpointannotazione1. Creare una sottoclasse mkpointannotazione

La classe di annotazione del punto rappresenta ciascun segnalibro sulla mappa. La classe di annotazione del punto rappresenta ciascun marcatore sulla mappa. Possono essere aggiunti singolarmente da MapView.AddAnnotation() o da una matrice tramite MapView.AddAnnotations().. Può essere addizionato individualmente usando MapView.AddAnnotation() o da un array utilizzando MapView.AddAnnotations().

Le classi di annotazione del punto non hanno una rappresentazione visiva, sono necessari solo per rappresentare i dati associati al Marker (ciò che è più importante, il Coordinate proprietà, che è la sua latitudine e la sua lunghezza sulla mappa) e le proprietà personalizzate: le categorie di annotazioni non hanno una rappresentazione visiva, sono solo Necessario per rappresentare i dati associati al marker (più importanti, il Coordinate proprietà che è la sua latitudine e longitudine sulla mappa) e qualsiasi proprietà personalizzata:

2. Creare una sottCLASSE MKMARKMARMARMARKANNNNOTATIONVE per marcatori unici2. Creare una sottoclasse mkmarkeannnnotationViewVetion per marcatori singoli

La vista delle annotazioni del marker è la rappresentazione visiva di ciascuna annotazione e ha uno stile utilizzando proprietà come: la vista di annotazione del marker è la rappresentazione visiva di ogni annotazione ed è in stile utilizzando Proprietà come:

  • markertcolor: il colore del marker.markerColor – il colore per il marker.
  • Glyphtext: testo visualizzato su marker.glyphtext – testo visualizzato nel marker.
  • Glyphimage: Impostare l’immagine mostrata in.glyphimage: imposta l’immagine visualizzata nel marker.
  • Displaypriority: Determina ordine z Quando la mappa è affollata di bookmarks.displayprioriormente – Determina lo z-ordine (comportamento impilabile) quando la mappa è affollata di marcatori. Utilizzare uno dei RequiredDefaultHigh o DefaultLow .USE UNO DI RequiredDefaultHigh, o DefaultLow.

Per supportare il cluster automatico del cluster, è necessario impostare anche: per supportare il clustering automatico, è necessario impostare anche:

  • clusteringinTIfier: Controllo quali marcatori sono raggruppati in Cluster.clusterintingItifier: questo controlla gli indicatori che vengono raggruppati insieme. È possibile utilizzare lo stesso identificatore per tutti i segnalibri o utilizzare diversi identificatori per controllare il modo in cui sono raggruppati. Puoi usare lo stesso identificatore per tutti i marcatori o utilizzare diversi identificatori per controllare il modo in cui sono raggruppati insieme.
public class BikeView : MKMarkerAnnotationView{ public static UIColor UnicycleColor = UIColor.FromRGB(254, 122, 36); public static UIColor TricycleColor = UIColor.FromRGB(153, 180, 44); public override IMKAnnotation Annotation { get { return base.Annotation; } set { base.Annotation = value; var bike = value as Bike; if (bike != null){ ClusteringIdentifier = "bike"; switch(bike.Type){ case BikeType.Unicycle: MarkerTintColor = UnicycleColor; GlyphImage = UIImage.FromBundle("Unicycle"); DisplayPriority = MKFeatureDisplayPriority.DefaultLow; break; case BikeType.Tricycle: MarkerTintColor = TricycleColor; GlyphImage = UIImage.FromBundle("Tricycle"); DisplayPriority = MKFeatureDisplayPriority.DefaultHigh; break; } } } }

3. Creare un mkannotationView per rappresentare il segnalibro cluster3. Creare un mkannotationView per segnalare cluster di marcatori

Sebbene la vista di annotazione che rappresenti un cluster di segnalibri potrebbe essere un’immagine semplice, gli utenti si aspettano che l’applicazione fornisca indicazioni visive su quanti segnalibri sono stati raggruppati. Mentre la vista Annotazione Ciò rappresenta per il cluster dei marcatori potrebbe essere un’immagine semplice, gli utenti si aspettano che l’app fornisca segnali visivi su quanti marcatori sono stati raggruppati insieme.

Nel codice di esempio, CoreGraphics viene utilizzato per rappresentare il numero di cluster I marcatori, nonché una rappresentazione grafica in cerchi di percentuale di ciascun tipo di marcatore. Il codice di esempio utilizza CoreGraphics per il rendering del numero di marcatori nel cluster, pure alla rappresentazione del grafico a cerchio della proporzione di ciascun tipo di marcatore.

È necessario impostare anche: è necessario impostare anche:

  • Disponibilità: determinare l’ordine z (comportamento di impilamento) quando la mappa è affollata di segnalibri.DisprityPriority – Determina Z- Ordine (comportamento impilabile) quando la mappa è affollata di marcatori. Utilizzare uno dei RequiredDefaultHigh o DefaultLow .USE UNO DI RequiredDefaultHigh, o DefaultLow.
  • collisionMode: Circle o .COLLISIONMODE – Circle o .

public class ClusterView : MKAnnotationView{ public static UIColor ClusterColor = UIColor.FromRGB(202, 150, 38); public override IMKAnnotation Annotation { get { return base.Annotation; } set { base.Annotation = value; var cluster = MKAnnotationWrapperExtensions.UnwrapClusterAnnotation(value); if (cluster != null) { var renderer = new UIGraphicsImageRenderer(new CGSize(40, 40)); var count = cluster.MemberAnnotations.Length; var unicycleCount = CountBikeType(cluster.MemberAnnotations, BikeType.Unicycle); Image = renderer.CreateImage((context) => { // Fill full circle with tricycle color BikeView.TricycleColor.SetFill(); UIBezierPath.FromOval(new CGRect(0, 0, 40, 40)).Fill(); // Fill pie with unicycle color BikeView.UnicycleColor.SetFill(); var piePath = new UIBezierPath(); piePath.AddArc(new CGPoint(20,20), 20, 0, (nfloat)(Math.PI * 2.0 * unicycleCount / count), true); piePath.AddLineTo(new CGPoint(20, 20)); piePath.ClosePath(); piePath.Fill(); // Fill inner circle with white color UIColor.White.SetFill(); UIBezierPath.FromOval(new CGRect(8, 8, 24, 24)).Fill(); // Finally draw count text vertically and horizontally centered var attributes = new UIStringAttributes() { ForegroundColor = UIColor.Black, Font = UIFont.BoldSystemFontOfSize(20) }; var text = new NSString($"{count}"); var size = text.GetSizeUsingAttributes(attributes); var rect = new CGRect(20 - size.Width / 2, 20 - size.Height / 2, size.Width, size.Height); text.DrawString(rect, attributes); }); } } } public ClusterView(){} public ClusterView(MKAnnotation annotation, string reuseIdentifier) : base(annotation, reuseIdentifier) { DisplayPriority = MKFeatureDisplayPriority.DefaultHigh; CollisionMode = MKAnnotationViewCollisionMode.Circle; // Offset center point to animate better with marker annotations CenterOffset = new CoreGraphics.CGPoint(0, -10); } private nuint CountBikeType(IMKAnnotation members, BikeType type) { nuint count = 0; foreach(Bike member in members){ if (member.Type == type) ++count; } return count; }}

4. Registrare le classi Vista4. Registrare le classi di visualizzazione

Quando viene creato e aggiunto il controllo della visualizzazione della mappa, registrati i tipi di visualizzazione di annotazione per abilitare il comportamento automatico della piscina del clusch mentre si avvicina e la mappa viene rimossa: quando il controllo della visualizzazione della mappa è Essere creati e comunicati in vista, registrare i tipi di visualizzazione delle annotazioni per abilitare il comportamento automatico del clustering in quanto la mappa è ingrandita dentro e fuori:

MapView.Register(typeof(BikeView), MKMapViewDefault.AnnotationViewReuseIdentifier);MapView.Register(typeof(ClusterView), MKMapViewDefault.ClusterAnnotationViewReuseIdentifier);

5. Rappresenta la mappa.5. Rendi la mappa!

Quando la mappa è rappresentata, i marker di annotazione sono raggruppati o rappresentati in base al livello di zoom. Quando la mappa è resa, i marcatori di annotazione saranno raggruppati o renderizzati a seconda del livello di zoom. Mentre si modifica il livello di zoom, i marker vengono imbrogrammi all’interno e all’esterno dei cluster. Il livello dello zoom cambia, i marcatori animano dentro e fuori cluster.

simulatore che mostra i marcatori raggruppati nel

Assegnazione Vedere la sezione Mappe per ulteriori informazioni su come visualizzare i dati con MapKit.Refer alla sezione Maps per ulteriori informazioni sui dati di visualizzazione con Mapkit.

Comprass Comprass Pulsante

IOS 11 Aggiungere la possibilità di estrarre la bussola dalla mappa e rappresentarla altrove in View.in 11 Aggiunge la possibilità di far schioccare la bussola fuori dalla mappa e renderla altrove nella vista. Vedere l’applicazione del campione TANDM per ottenere un esempio. Sede l’app di esempio TANDM per un esempio.

Creare un pulsante che assomiglia a una bussola (inclusa l’animazione in diretta quando si cambia l’orientamento della mappa) e lo rappresento su un altro controllo. Creare al pulsante che assomiglia alla bussola (inclusa l’animazione live quando viene modificato l’orientamento della mappa) e lo rende su un altro controllo.

pulsante bussola nella barra di navigazione

Il seguente codice crea un pulsante Compass e lo rappresenta nella barra di navigazione: il codice qui sotto crea al pulsante Compass e lo rende sulla barra di navigazione:

var compass = MKCompassButton.FromMapView(MapView);compass.CompassVisibility = MKFeatureVisibility.Visible;NavigationItem.RightBarButtonItem = new UIBarButtonItem(compass);MapView.ShowsCompass = false; // so we don't have two compasses!

ShowsCompass La proprietà può essere utilizzata per controllare la visibilità della bussola predefinita all’interno della visualizzazione della mappa.Il ShowsCompass La proprietà può essere utilizzata per controllare la visibilità della bussola predefinita all’interno della vista della mappa.

Vista Scalescale

Aggiungi l Alla scala altrove sulla vista attraverso il metodo MKScaleView.FromMapView() per ottenere un’istanza della visualizzazione della scala che verrà aggiunta altrove dal nido di viste.Aggiungere la scala altrove nella vista usando Il metodo MKScaleView.FromMapView() per aggiungere altrove nella vista Hierrachy.

Vista arrampicata sovrapposta su una mappa

var scale = MKScaleView.FromMapView(MapView);scale.LegendAlignment = MKScaleViewAlignment.Trailing;scale.TranslatesAutoresizingMaskIntoConstraints = false;View.AddSubview(scale); // constraints omitted for simplicityMapView.ShowsScale = false; // so we don't have two scale displays!

ShowsScale La proprietà può essere utilizzata per controllare la visibilità dalla bussola predefinita all’interno della vista della mappa.ShowsScale La proprietà può essere utilizzata per controllare la visibilità della bussola predefinita all’interno della vista della mappa.

Tracciamento dei pulsanti Pulsante di tracciamento

Il pulsante di tracciamento dell’utente si concentra Nella posizione attuale dell’utente. Il pulsante di tracciamento dell’utente centra la mappa sulla posizione corrente dell’utente. Utilizzare il metodo MKUserTrackingButton.FromMapView() Per ottenere un’istanza del pulsante, applicare le modifiche del formato e aggiungere ovunque dalla gerarchia di vista. Utilizzare il metodo MKUserTrackingButton.FromMapView() Per ottenere un’istanza del pulsante, applicare la formattazione delle modifiche e aggiungere altrove nella vista Hierrachy.

Pulsante posizione utente sovrapposto su una mappa

var button = MKUserTrackingButton.FromMapView(MapView);button.Layer.BackgroundColor = UIColor.FromRGBA(255,255,255,80).CGColor;button.Layer.BorderColor = UIColor.White.CGColor;button.Layer.BorderWidth = 1;button.Layer.CornerRadius = 5;button.TranslatesAutoresizingMaskIntoConstraints = false;View.AddSubview(button); // constraints omitted for simplicity
  • Mapkit ‘TANDM’ ESEMPIO MAPKIT Esempio ‘TANDM’
  • MKCOMPASSBUTTONMKCOMPASSBUTTON
  • Notizie di Mapkit (WWDC) ( Video) Cosa c’è di nuovo in Mapkit (WWDC) (video)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *