在我的代码中,首先我显示了所需位置的当前位置和静态位置,例如。莫比乌斯适合。但是当我在搜索相同的时候。莫比乌斯适合它显示两个彼此靠近莫比斯适合位置的针脚,而不是一个。如何在搜索中只显示一个引脚? 我的代码:
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()
}
}
答案 0 :(得分:0)
已更新
在添加新注释之前,您必须先删除以前添加的注释 所以你可以用这两种方式实现这个目标
首先:在添加新的
之前删除您的特定注释for annotation in mapView.annotations
{
if(annotation.title! == "yourTitleAnnotationToRemove"){
mapView.removeAnnotation(annotation);
break
}
}
第二步:删除所有符号,然后再添加新符号
let allAnnotations = mapView.annotations
mapView.removeAnnotations(allAnnotations)