当搜索位置时它在地图上显示2个引脚而不是1个引脚。在搜索时只显示一个引脚?

时间:2017-06-21 05:25:45

标签: ios swift swift3 mkannotation

在我的代码中,首先我显示了所需位置的当前位置和静态位置,例如。莫比乌斯适合。但是当我在搜索相同的时候。莫比乌斯适合它显示两个彼此靠近莫比斯适合位置的针脚,而不是一个。如何在搜索中只显示一个引脚?  我的代码:

 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()


                }
            }

1 个答案:

答案 0 :(得分:0)

已更新

在添加新注释之前,您必须先删除以前添加的注释 所以你可以用这两种方式实现这个目标

首先:在添加新的

之前删除您的特定注释
for  annotation in mapView.annotations
{
    if(annotation.title! == "yourTitleAnnotationToRemove"){
    mapView.removeAnnotation(annotation);
        break
    }
}

第二步:删除所有符号,然后再添加新符号

let allAnnotations = mapView.annotations
mapView.removeAnnotations(allAnnotations)