Результаты MkLocalSearch не сохраняются при перемещении в MapView - PullRequest
0 голосов
/ 29 сентября 2018

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

Можно ли добавить предыдущие аннотации в массив после поиска, а затем добавить все новые, которых нет в этом предыдущем массиве после перемещения по карте, чтобы все результаты отображались на карте?

Любые предложения будут полезны для реализации этого.

class BarsAroundMeVC: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate, UIGestureRecognizerDelegate{
    @IBOutlet weak var mapView: MKMapView!

    let locationManager = CLLocationManager()

    override func viewDidLoad()
    {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

        let mapDragRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didDragMap(gestureRecognizer:)))
        mapDragRecognizer.delegate = self
        self.mapView.addGestureRecognizer(mapDragRecognizer)
    }

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool
    {
        return true
    }

    @objc func didDragMap(gestureRecognizer: UIGestureRecognizer)
    {
        if (gestureRecognizer.state == UIGestureRecognizerState.began)
        {
            print("Map drag began")
            self.locationManager.stopUpdatingLocation()
        }

        if (gestureRecognizer.state == UIGestureRecognizerState.ended)
        {
            print("Map drag ended")
            self.locationManager.stopUpdatingLocation()
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {

        let location = locations[0]
        let center = location.coordinate
        let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
        let region = MKCoordinateRegion(center: center, span: span)

        mapView.setRegion(region, animated: true)
        mapView.showsUserLocation = true
        showBarsAroundUser()
    }

    func showBarsAroundUser()
    {
        let request = MKLocalSearchRequest()
        request.naturalLanguageQuery = "bar"
        request.region = mapView.region

        let search = MKLocalSearch(request: request)

        search.start(completionHandler: {(response, error) in
            if(error != nil) 
            {
                print("Error occured in search: \(error!.localizedDescription)")
            }
            else if (response!.mapItems.count == 0)
            {
                print("No matches found")
            }
            else
            {
                for item in response!.mapItems
                {
                    //print("Name = \(item.name)")

                    let annotation = MKPointAnnotation()
                    annotation.coordinate = item.placemark.coordinate
                    annotation.title = item.name
                    self.mapView.addAnnotation(annotation)
                }
            }
        });
    }
...