при поиске местоположения на карте отображаются 2 булавки вместо 1 булавки. Как показать только одну булавку при поиске?

в моем коде сначала я показываю текущее местоположение и статическое местоположение желаемого места, например. Мобиус подходит. но когда я ищу то же самое, т.е. mobius fit, он отображает два вывода рядом друг с другом в месте подгонки мебиуса вместо одного. как показать только один пин в поиске? Мой код:

 class LocationMapViewController:  UIViewController,CLLocationManagerDelegate, MKMapViewDelegate,UISearchBarDelegate,UIGestureRecognizerDelegate{

            var searchController:UISearchController!
            var annotation:MKAnnotation!
            var localSearchRequest:MKLocalSearchRequest!
            var localSearch:MKLocalSearch!
            var localSearchResponse:MKLocalSearchResponse!
            var error:NSError!
            var pointAnnotation:MKPointAnnotation!
            var pinAnnotationView:MKAnnotationView!
            let manager = CLLocationManager()
            @IBOutlet var MKView: MKMapView!
            @IBOutlet var searchBarButton: UISearchBar!


    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
                let location = locations[0]
                let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
                let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
                let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
                MKView.setRegion(region, animated: true)
                self.MKView.showsUserLocation = true
            }



//Here im displaying two static location and current location


            let regionRadius: CLLocationDistance = 10000

            override func viewDidLoad() {
                self.searchBarButton.delegate = self
                super.viewDidLoad()
                manager.delegate = self
                manager.desiredAccuracy = kCLLocationAccuracyBest
                manager.requestWhenInUseAuthorization()
                manager.startUpdatingLocation()

                manager.stopMonitoringSignificantLocationChanges()
                let initialLocation = CLLocation(latitude: 37.539624, longitude: -122.062990)

                self.MKView.showsUserLocation = true
                self.MKView.isZoomEnabled = true
                centerMapOnLocation(location: initialLocation)
                let myAnnotation: MKPointAnnotation = MKPointAnnotation()
                myAnnotation.coordinate = CLLocationCoordinate2DMake(initialLocation.coordinate.latitude, initialLocation.coordinate.longitude);
                myAnnotation.title = "Fit@PRC"
                myAnnotation.subtitle = "Newark, CA 94560"
                MKView.addAnnotation(myAnnotation)
                MKView.selectAnnotation(myAnnotation, animated: true)

    let MobiusLocation = CLLocation(latitude: 37.454904, longitude: -122.228262)

                self.MKView.showsUserLocation = true
                self.MKView.isZoomEnabled = true
                centerMapOnLocation(location: MobiusLocation)
                let mobiusAnnotation: MKPointAnnotation = MKPointAnnotation()
                mobiusAnnotation.coordinate = CLLocationCoordinate2DMake(MobiusLocation.coordinate.latitude, MobiusLocation.coordinate.longitude);
                mobiusAnnotation.title = "Mobius Fit"
                mobiusAnnotation.subtitle = "Redwood City,CA 94061"
                MKView.addAnnotation(mobiusAnnotation)
                MKView.selectAnnotation(mobiusAnnotation, animated: true)


            }

// this is my search function . how to clear previous pins on search ?

    func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

                searchBar.endEditing(true)
                //1
                searchBar.resignFirstResponder()

                if self.MKView.annotations.count != 0{
                    annotation = self.MKView.annotations[0]
                    self.MKView.removeAnnotation(annotation)
                }
                //2
                localSearchRequest = MKLocalSearchRequest()
                localSearchRequest.naturalLanguageQuery = searchBar.text
                localSearch = MKLocalSearch(request: localSearchRequest)
                localSearch.start { (localSearchResponse, error) -> Void in

                    if localSearchResponse == nil{
                        let alertController = UIAlertController(title: nil, message: "Place Not Found", preferredStyle: UIAlertControllerStyle.alert)
                        alertController.addAction(UIAlertAction(title: "Dismiss", style: UIAlertActionStyle.default, handler: nil))
                        self.present(alertController, animated: true, completion: nil)


                        return
                    }
                    //3
                    self.pointAnnotation = MKPointAnnotation()
                    self.pointAnnotation.title = searchBar.text
                    self.pointAnnotation.coordinate = CLLocationCoordinate2D(latitude: localSearchResponse!.boundingRegion.center.latitude, longitude:     localSearchResponse!.boundingRegion.center.longitude)


                    self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation, reuseIdentifier: nil)
                    self.MKView.centerCoordinate = self.pointAnnotation.coordinate

                    self.MKView.addAnnotation(self.pinAnnotationView.annotation!)

                    self.manager.stopUpdatingLocation()
                    self.manager.stopMonitoringSignificantLocationChanges()


                }
            }

person user8019529    schedule 21.06.2017    source источник
comment
let allAnnotations = self.mapView.annotations self.yourMapVieww.removeAnnotations(allAnnotations) вы должны выполнить поиск в Google, как удалить аннотации, прежде чем задавать вопросы.   -  person Gagan_iOS    schedule 21.06.2017
comment


Ответы (1)


ОБНОВЛЕНО

Вы должны удалить ранее добавленную аннотацию перед добавлением новой. Таким образом, вы можете добиться этого двумя способами.

Во-первых: удалите свою конкретную аннотацию перед добавлением новой

for  annotation in mapView.annotations
{
    if(annotation.title! == "yourTitleAnnotationToRemove"){
    mapView.removeAnnotation(annotation);
        break
    }
}

Второе: удалите все обозначения перед добавлением нового с помощью

let allAnnotations = mapView.annotations
mapView.removeAnnotations(allAnnotations)
person Vikky    schedule 21.06.2017