ketika mencari lokasi, ini menampilkan 2 pin di peta, bukan 1 pin. Bagaimana cara menampilkan hanya satu pin di pencarian?

dalam kode saya, pertama saya menunjukkan lokasi saat ini dan lokasi statis dari tempat yang diinginkan misalnya. Mobius cocok. tetapi ketika saya mencari hal yang sama yaitu. mobius fit menampilkan dua pin yang berdekatan satu sama lain dari lokasi mobius fit, bukan satu. bagaimana cara menampilkan hanya satu pin pada pencarian? Kode saya:

 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 sumber
comment
let allAnnotations = self.mapView.annotations self.yourMapVieww.removeAnnotations(allAnnotations) Anda harus mencari di pencarian google cara menghapus anotasi sebelum memposting pertanyaan.   -  person Gagan_iOS    schedule 21.06.2017
comment
Kemungkinan duplikat Bagaimana caranya hapus semua anotasi dari MKMapView kecuali anotasi lokasi pengguna?   -  person bestiosdeveloper    schedule 21.06.2017


Jawaban (1)


DIPERBARUI

Anda harus menghapus Anotasi yang ditambahkan sebelumnya sebelum menambahkan yang baru. Jadi, Anda dapat mencapainya dengan dua cara ini

Pertama: hapus anotasi spesifik Anda sebelum menambahkan yang baru

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

Kedua: hapus semua notasi sebelum menambahkan notasi baru

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