Есть ли предустановленный «индекс» или что-то подобное, что позволяет мне ссылаться на конкретные аннотации, созданные пользователем?Swift 4 - PullRequest
0 голосов
/ 04 октября 2018

У меня есть приложение, в котором пользователь может искать местоположения, нажимать на строку в табличном представлении, и аннотация будет размещена в метке.У меня есть кнопка "meetUpButton", которая позволяет им размещать несколько аннотаций, а не то, что мой код делает по умолчанию, а именно: удалять аннотацию, если щелкнуть новый результат поиска.Есть ли способ сослаться на конкретную аннотацию, которую создал мой пользователь, даже если он сделал несколько?Например, скажем, я хочу добавить широту двух аннотаций, созданных моим пользователем ... Если у меня есть

let annotation = MKPointAnnotation()
annotation.coordinate.latitude

Есть ли способ сослаться на что-то вроде первой аннотации с индексом 0 иследующий, который мой пользователь выбрал с 1 или другим способом?Вот мой код, который может сделать это более понятным.

extension ViewController: handleMapSearch {
func dropPinZoomIn(placemark:MKPlacemark) {
    resultSearchController?.isActive = false

    // cache the pin
    selectedPin = placemark
    // clear existing pins
    if meetUpOutlet.isEnabled == true {

        mapView.removeAnnotations(mapView.annotations)

    } else {

    }

    let annotation = MKPointAnnotation()

    annotation.coordinate = placemark.coordinate
    annotation.title = placemark.name
    if let city = placemark.locality,
        let state = placemark.administrativeArea {
        annotation.subtitle = "(\(city)) (\(state))"
    }
    mapView.addAnnotation(annotation)
    let span = MKCoordinateSpanMake(0.05, 0.05)
    let region = MKCoordinateRegionMake(placemark.coordinate, span)
    mapView.setRegion(region, animated: true)
}
} 

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы можете реализовать пользовательский класс аннотаций.

например

class MyAnnotation : NSObject, MKAnnotation {
    var coordinate : CLLocationCoordinate2D
    var title: String?
    var subtitle: String?
    var index: Int?

    init(location coord:CLLocationCoordinate2D) {
        self.coordinate = coord
        super.init()
    }
}

Использование:

    let annotation = MyAnnotation(location: coordinate)
    annotation.title = "title"
    annotation.subtitle = "subtitle"
    annotation.index = 1

Удалить аннотации (только индекс == 1)

    for annotation in self.mapView.annotations {
        guard let annotation = annotation as? MyAnnotation else {
            continue
        }
        if annotation.index == 1 {
            self.mapView.removeAnnotation(annotation)
        }
    }
0 голосов
/ 04 октября 2018

Вы можете попробовать использовать annotations свойство MKMapView экземпляра, чтобы получить все использование

let anns = self.mapView.annotations 
...