Nouvelles fonctionnalités de MapKit dans iOS 11New Caractéristiques de MapKit sur iOS 11

  • 08/30/2017
  • Temps de lecture: 4 minutes
    • d
    • ou

iOS 11 Ajoutez les nouvelles fonctionnalités suivantes à mapkit: IOS 11 ajoute les nouvelles fonctionnalités suivantes à mapkit:

  • cluster de cluster de clustering de cluster
  • BOUTON DE BOUTON COMPASS
  • Vue de la balance de l’échelle
  • Bouton de suivi de suivi d’occasion

Carte qui montre des marqueurs groupés et Le bouton Boussole

Les marqueurs de groupe sont automatiquement lors de la fabrication de marqueurs de regroupement zométamatomatiquement lors de zoomer

exemple de mapkit « tandm » indique comment implémenter la nouvelle fonctionnalité de clusching de iOS 11.L’expose Mapkit Échantillon « tandm » montre comment mettre en œuvre le nouveau Caractéristique de la clustering d’annotation IOS 11.

1. Créez une sous-classe MKPoindannotation1. Créer une sous-classe MKPointNotation

La classe d’annotation Point représente chaque signet sur la carte.La classe d’annotation de points représente chaque marqueur sur la carte. Ils peuvent être ajoutés individuellement par MapView.AddAnnotation() ou d’une matrice via MapView.AddAnnotations(). Ils peuvent être admis individuellement à l’aide deMapView.AddAnnotation() ou à partir d’un tableau à l’aide de MapView.AddAnnotations().

Les classes d’annotation Point n’ont pas de représentation visuelle, elles ne sont nécessaires que pour représenter les données associées au marqueur (ce qui est plus important, la propriété Coordinate la propriété, qui est sa latitude et sa longueur sur la carte) et les propriétés personnalisées: les classes d’annotation de points n’ont pas de représentation visuelle, elles ne sont que Requis pour représenter les données associées au marqueur (le plus importants, la Coordinate propriété qui est sa latitude et sa longitude sur la carte) et toutes les propriétés personnalisées:

2. Créez une sous-sclaçage MKMarkMarkNnotationViews pour les marqueurs uniques2. Création d’une sous-classe MkmarkNnnnynotationViewnotation pour les marqueurs uniques

La vue Annotations de marqueur est la représentation visuelle de chaque annotation et dispose d’un style utilisant des propriétés telles que: La vue d’annotation du marqueur est la représentation visuelle de chaque annotation et est stylé Propriétés telles que:

  • MarkertColor: la couleur du marqueur.MarkertColor – la couleur du marqueur.
  • Glyphtext: texte affiché sur marqueur.glyphtext – texte affiché dans le marqueur.
  • Glyphimage: Définissez l’image indiquée dans le.glyphimage – Définit l’image affichée dans le marqueur.
  • DisplayPriority: détermine la commande z lorsque la carte est encombrée de signets.DisplayPriority – détermine la commande Z (comportement d’empilement) lorsque la carte est encombrée de marqueurs. Utilisez l’un des RequiredDefaultHigh ou DefaultLow. Utilisez l’un de RequiredDefaultHigh ou DefaultLow.

Pour prendre en charge le cluster automatique de cluster, vous devez également définir: Pour prendre en charge la clustering automatique, vous devez également définir:

  • clusteringinifier: contrôle quels marqueurs sont regroupés Clusters.clusteringinifier – ces commandes que les marqueurs sont regroupés ensemble. Vous pouvez utiliser le même identifiant pour tous les signets ou utiliser différents identifiants pour contrôler la manière dont ils sont groupés. Vous pouvez utiliser le même identifiant pour tous vos marqueurs ou utiliser différents identifiants pour contrôler la manière dont elles sont regroupées.
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. Créez un MkannotationView pour représenter Signet Clusters3. Créer un MkannotationView pour signaler des grappes de marqueurs

Bien que la vue d’annotation représentant un groupe de signets de signets pourrait être une image simple, les utilisateurs s’attendent à ce que l’application fournisse des indications visuelles sur le nombre de signets regroupés.La vue de l’annotation. Cela représente au groupe de marqueurs pourrait être une image simple, les utilisateurs s’attendent à ce que l’application fournisse des indications visuelles sur le nombre de marqueurs groupés ensemble.

dans le code de l’échantillon, CoreGraphics est utilisé pour représenter le nombre de clusters Marqueurs, ainsi qu’une représentation graphique dans des cercles de proportion de chaque type de marqueur. Le code d’échantillon utilise Coregraphics pour rendre le nombre de marqueurs dans le cluster, ainsi que la représentation du graphique de la proportion de chaque type de marqueur.

Vous devez également définir: vous devez également définir:

  • displaypriority: Déterminez l’ordre Z (comportement d’empilement) lorsque la carte est encombrée de signets.DisplayPriority – détermine z- Commande (comportement d’empilement) lorsque la carte est encombrée de marqueurs. Utilisez l’un des RequiredDefaultHigh ou DefaultLow. Utilisez l’un de RequiredDefaultHigh ou DefaultLow.
  • collisionmode: Circle ou .CollisionMode – Circle ou .

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. Enregistrez les classes Vista4. Enregistrez les classes d’affichage

Lorsque le contrôle de la vue Carte est créé et ajouté à une vue, enregistrez les types d’affichage de l’annotation pour activer le comportement automatique de la piscine Clusch à l’approche et la carte est supprimée: lorsque le contrôle de la vue Carte est Étant créé et ajusté à une vue, enregistrez les types d’affichage d’annotation pour activer le comportement automatique de la clustering car la carte est zoomée et sortie:

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

5. représente la carte.5. Rendez la carte!

Lorsque la carte est représentée, les marqueurs d’annotation sont regroupés ou représentés sur la base du niveau de zoom. Lorsque la carte est rendue, les marqueurs d’annotation seront regroupés ou rendus en fonction du niveau de zoom. Lorsque vous modifiez le niveau de zoom, les marqueurs sont trompés à l’intérieur et à l’extérieur des clusters. Le niveau de zoom change, les marqueurs animent dans et hors des clusters.

Simulateur montrant les marqueurs groupés dans le

Affectation Voir la section Cartes Pour plus d’informations sur la manière d’afficher les données avec mapkit.Ferfer dans la section Maps pour plus d’informations sur les données d’affichage avec MapKit.

Compas informatique BOUTON

iOS 11 Ajoutez la possibilité d’extraire la boussole de la carte et de le représenter ailleurs dans la vue.in 11 ajoute la possibilité de faire sortir la boussole de la carte et de le rendre ailleurs dans la vue. Voir l’exemple de l’exemple de tandm pour obtenir un exemple.see l’application exemple de tanm pour un exemple.

Créer un bouton qui ressemble à une boussole (y compris une animation en direct lors de la modification de l’orientation de la carte) et je le représente sur un autre Contrôle. Créez sur le bouton qui ressemble à une boussole (y compris une animation en direct lorsque l’orientation de la carte est modifiée) et le rend sur un autre contrôle.

Bouton Compass dans la barre de navigation

Le code suivant crée un bouton de compas et le représente dans la barre de navigation: le code ci-dessous crée un bouton Compass et le rend dans la barre de navigation:

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

la propriété ShowsCompass Propriété peut être utilisée pour contrôler la visibilité de la boussole par défaut dans la vue de la carte.Le ShowsCompass Propriété peut être utilisé pour contrôler la visibilité de la boussole par défaut dans la vue Carte.

Vue de scalescale

Ajouter l À l’échelle ailleurs sur la vue via la méthode MKScaleView.FromMapView() pour obtenir une instance de la vue d’échelle qui va être ajoutée ailleurs du nid de vues.Ajouter la balance ailleurs dans la vue en utilisant MKScaleView.FromMapView() méthode pour ajouter ailleurs dans le hierrachy de vue.

Vista Escalade superposée sur une carte

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!

La propriété ShowsScale Propriété peut être utilisée pour contrôler la visibilité à partir de la boussole par défaut dans la vue de la carte.Le ShowsScale Propriété peut être utilisé pour contrôler la visibilité de la boussole par défaut à l’intérieur de la vue Carte.

Bouton Tracking Bouton de suivi USERR

Le bouton de suivi de l’utilisateur se concentre Sur l’emplacement utilisateur actuel. Le bouton de suivi de l’utilisateur centre la carte sur l’emplacement actuel de l’utilisateur. Utilisez la méthodeMKUserTrackingButton.FromMapView() pour obtenir une instance du bouton, appliquez les modifications du format et ajoutez n’importe où de la hiérarchie de vue. Utilisez le MKUserTrackingButton.FromMapView() Méthode Pour obtenir une instance du bouton, appliquez les modifications de formatage et ajoutez ailleurs dans la vue Hierrachy.

Bouton d'emplacement utilisateur superposé sur une carte

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
  • EXEMPLE « TANDM » EXEMPLE DE MAPKIT ‘TANDM’
  • MKComPassButtonMkCompassbutton
  • Actualités de MapKit (WWDC) ( Vidéo) Quoi de neuf dans Mapkit (WWDC) (Vidéo)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *