J'essaie de convertir le code Objective-C dans la reference MapKit MKPolygon
du Listing 6-9 en Swift.
Quand j'appelle la fonction en utilisant le
init(coordinates:count:)
fonction init, j'obtiens l'erreur:
Argument manquant pour le paramètre 'interiorPolygons' dans l'appel
- Gestion des balises à fermeture automatique dans NSXmlParser?
- Comment append / supprimer un object à l'index swift
- Est-il possible de faire une application iPhone en utilisant uniquement c ++?
- Protocole Swift pour les sous-classs UIViewController
- Ancres perdant la capacité de cliquer après avoir défilé sur iOS Safari
Lorsque j'appelle la fonction avec l'argument interiorPolygons, j'obtiens l'erreur:
Argument supplémentaire en appel
Voici le code que j'utilise.
var points: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]() points[0] = CLLocationCoordinate2DMake(41.000512, -109.050116) points[1] = CLLocationCoordinate2DMake(41.002371, -102.052066) points[2] = CLLocationCoordinate2DMake(36.993076, -102.041981) points[3] = CLLocationCoordinate2DMake(36.99892, -109.045267) var poly: MKPolygon = MKPolygon(points, 4) poly.title = "Colorado" theMapView.addOverlay(poly)
METTRE À JOUR:
points.withUnsafePointerToElements() { (cArray: UnsafePointer<CLLocationCoordinate2D>) -> () in poly = MKPolygon(coordinates: cArray, count: 4) }
semble se débarrasser de l'erreur du compilateur, mais n'ajoute toujours pas de superposition.
Les problèmes avec:
var poly: MKPolygon = MKPolygon(points, 4)
sont qu'il ne donne pas les labels d'argument pour l'initialiseur et ce n'est pas en passant des points
comme un pointeur.
Changez la ligne pour:
var poly: MKPolygon = MKPolygon(coordinates: &points, count: 4)
(La version de points.withUnsafePointerToElements...
dans votre mise à jour fonctionnera également.)
Notez également que var points: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]()
crée un tableau vide . Doing points[0] = ...
devrait provoquer une erreur d'exécution puisque le tableau n'a aucun élément pour commencer. Au lieu de cela, ajoutez les coordonnées au tableau à l'aide de points.append()
:
points.append(CLLocationCoordinate2DMake(41.000512, -109.050116)) points.append(CLLocationCoordinate2DMake(41.002371, -102.052066)) points.append(CLLocationCoordinate2DMake(36.993076, -102.041981)) points.append(CLLocationCoordinate2DMake(36.99892, -109.045267))
ou simplement déclarer et initialiser set:
var points = [CLLocationCoordinate2DMake(41.000512, -109.050116), CLLocationCoordinate2DMake(41.002371, -102.052066), CLLocationCoordinate2DMake(36.993076, -102.041981), CLLocationCoordinate2DMake(36.99892, -109.045267)]
Si vous ne voyez toujours pas la superposition, assurez-vous que vous avez implémenté la méthode de délégation rendererForOverlay
(et que vous avez défini ou connecté la propriété delegate
la vue de carte):
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! { if overlay is MKPolygon { var polygonRenderer = MKPolygonRenderer(overlay: overlay) polygonRenderer.fillColor = UIColor.cyanColor().colorWithAlphaComponent(0.2) polygonRenderer.strokeColor = UIColor.blueColor().colorWithAlphaComponent(0.7) polygonRenderer.lineWidth = 3 return polygonRenderer } return nil }
Indépendante: Plutôt que d'appeler les points
du tableau, les coordinates
pourraient être meilleures car les points
impliquent que le tableau pourrait contenir des structures MKMapPoint
ce que l'initialiseur (points:count:)
prend comme premier argument.