2017-12-16 4 views
0

Ich schreibe eine einfache App, mit der Sie nach einem Ort suchen und dort einen Pin ablegen können. Allerdings kann ich nicht herausfinden, wie ich diese Pin zum Bleiben bekomme, wenn ich versuche, eine weitere hinzuzufügen. Hier ist mein Code:(Swift 3) So fügen Sie einem MapView mehrere Pins hinzu

class MyMapViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate, UISearchBarDelegate{ 

var isMapToBeUpdated = true 
var numOfTrackedLocations = 0 
let locationManager = CLLocationManager.self 
let annotation = MKPointAnnotation() 
var annotationTitle = "" 
let appDelegate = UIApplication.shared.delegate as! AppDelegate 
var longArr: [Double] = [] 
var latArr: [Double] = [] 
var cityArr: [String] = [""] 
var count: Int = 0 

//sets variables and links this file to the app delegate// 
@IBOutlet weak var myMapView: MKMapView! 

@IBAction func seachButton (_sender: Any){ 
    let searchController = (UISearchController(searchResultsController: nil)) 
    searchController.searchBar.delegate = self 
    present(searchController, animated: true, completion: nil) 
} 
//links the search button to the search method// 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 
    UIApplication.shared.beginIgnoringInteractionEvents() 
    let activityIndicator = UIActivityIndicatorView() 
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
    activityIndicator.center = self.view.center 
    activityIndicator.hidesWhenStopped = true 
    activityIndicator.startAnimating() 
    //the above adds a search bar function, and sets the loading animation// 
    self.view.addSubview(activityIndicator) 

    searchBar.resignFirstResponder() 
    dismiss(animated: true, completion: nil) 

    let searchRequest = MKLocalSearchRequest() 
    searchRequest.naturalLanguageQuery = searchBar.text 

    let activeSearch = MKLocalSearch(request: searchRequest) 

    activeSearch.start { (response, error) in 
     //starts a search session// 
     activityIndicator.stopAnimating() 
     UIApplication.shared.endIgnoringInteractionEvents() 

     if response == nil 
     { 
      print ("ERROR") 
     } 
     else 
     { 
      var annotation = self.myMapView.annotations 

      let latitude = response?.boundingRegion.center.latitude 
      let longitude = response?.boundingRegion.center.longitude 

      self.annotation.title = searchBar.text 
      self.annotation.coordinate = CLLocationCoordinate2DMake(latitude!, longitude!) 
      self.myMapView.addAnnotation(self.annotation) 

      let coordinate: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude!, longitude!) 
      let span = MKCoordinateSpanMake(0.1, 0.1) 
      let region = MKCoordinateRegionMake(coordinate, span) 
      self.myMapView.setRegion(region, animated: true) 

Dies ist nur ein kleiner Teil, wenn Sie mehr sehen will ich es schreiben kann, aber es nicht auf die Anmerkungen beziehen. Wenn mir jemand dabei helfen kann, wäre das sehr zu begrüßen.

+0

Sie überspringen Schritte. Was sind longArr, latArr, cityArr für? –

+0

Arrays, die ich später für Kerndaten verwende, spielen für sie keine Rolle. – Mot

+0

Sie können dafür Aufzählung oder for-Schleife verwenden. –

Antwort

0

Kartenansicht hat die Funktion, mehrere Pins anzuzeigen.

map.showAnnotations([arrAnnotation], animated: true) 

wo arrAnotation arr von MKAnnotation ist.

Verwandte Themen