2016-04-14 4 views
0

Ich habe eine mapView in meiner App, die über 200 Annotation Pins zeigen sollte. Bisher habe ich knapp 100 Pins hinzugefügt und es hat mich gewundert. Gibt es nicht eine klügere Art, sie zu zeigen? Der Code ist im Moment sehr lang und ich befürchte, dass es noch länger ist. Unten können Sie sehen, wie ich die Pins hinzugefügt habe (mit einem Beispiel von nur einem Pin). Wie kann ich das klüger machen?Die beste Art, über 200 Annotationsstifte zu zeigen iOS9 swift

let first = Artwork(title: "First annotation", 
           locationName: "Tryk for rute", 
           discipline: "Butik", 
           coordinate: CLLocationCoordinate2D(latitude: 55.931326, longitude: 12.284186)) 

map.addAnnotation(first) 

Code Die in Stücke wird für rund 100 Anmerkung Stiften geschrieben - es muss einen besseren Weg geben!

Hoffe, du kannst mir helfen, danke!

+0

Wie sieht Ihr Datenarray aus? Wenn Sie es posten können, werden wir in der Lage sein, mit dem richtigen Code zu antworten. –

Antwort

0

Ich gehe hier davon aus, dass die Daten für Ihre Anmerkungen nicht in Objekten in einem Array gespeichert sind und dass Sie 100 Kopien Ihres Beispielcodes haben.

Wenn die Informationen statisch sind, können Sie die Informationen in eine Eigenschaftsliste aufnehmen (plist).

Ihr plist etwas wie folgt aussehen:

<dict> 
    <key>Locations</key> 
    <array> 
     <dict> 
      <key>Title</key> 
      <string>First annotation</string> 
      ... more information here 
     </dict> 
     <dict> 
      <key>Title</key> 
      <string>Second annotation</string> 
      ... more information here 
     </dict> 
    </array> 
</dict> 
</plist> 

Anschließend können Sie die plist laden und die Standorte Array iterieren Ihre Anmerkungen zu der Karte hinzuzufügen. Etwas wie dieses:

func addAnnotations() 
    { 
     // load your plist 
     if let path = NSBundle.mainBundle().pathForResource("StaticInformation", ofType: "plist") { 
      if let dict = NSDictionary(contentsOfFile: path) as? Dictionary<String, AnyObject> { 
       // get your static locations information as an array 
       if let locations = dict["Locations"] as? Array<Dictionary<String, AnyObject>> { 
        // iterate your locations 
        for (index, location) in locations.enumerate() { 

         let title = location["Title"] as? String 
         // obtain the information needed from the location dict 

         // create your annotation 
         let first = Artwork(title: title, 
              locationName: ..., 
              discipline: ..., 
              coordinate: ...) 

         map.addAnnotation(first) 
        } 
       } 
      } 
     } 
    } 

Der Code wird nicht getestet, sorry. Aber hoffentlich kommst du auf die Idee.