Как показать несколько аннотаций на карте? - PullRequest
0 голосов
/ 08 марта 2020

Показывается только последняя аннотация. Я хочу показать все из них. Как это сделать? Я также получаю ошибку. Что такое "libMobileGestalt MobileGestalt. c: 1647: Не удалось получить информацию о регионе"

Контроллер представления:

import UIKit
import MapKit

class ViewController: UIViewController {

    @IBOutlet weak var mapView: MKMapView!

    let locations = [

        Location(title: "New York, NY", latitude: 40.713054, longitude: -74.007228),
        Location(title: "Los Angeles, CA", latitude: 34.052238, longitude: -118.243344),
        Location(title: "Chicago, IL", latitude: 41.883229, longitude: -87.632398)
    ]

    override var preferredStatusBarStyle: UIStatusBarStyle {
        .lightContent
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        for location in locations {

            let annotation = MKPointAnnotation()

            annotation.title = location.title
            annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)

            let region = MKCoordinateRegion(center: annotation.coordinate, span: MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005))

            mapView.addAnnotation(annotation)
            mapView.setRegion(region, animated: true)
        }
    }
}

Модель данных:

import UIKit

struct Location {

    let title: String
    let latitude: Double
    let longitude: Double
}

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Вы можете использовать addAnnotations для добавления нескольких аннотаций. Вы также можете позвонить setRegion только один раз

override func viewDidLoad() {
    super.viewDidLoad()

    var annotations = [MKAnnotation]()

    for location in locations {

        let annotation = MKPointAnnotation()

        annotation.title = location.title
        annotation.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)

        annotations.append(annotation)

    }

    mapView.addAnnotations(annotations)

    if let lastAnnotation = annotations.last {
        let region = MKCoordinateRegion(center: lastAnnotation.coordinate, span: MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005))
        mapView.setRegion(region, animated: true)
    }
}
0 голосов
/ 08 марта 2020

Пройдя примерно час, я мог заставить его работать. Это решение, но я думаю, что оно неэффективно. Есть метод, который использует многократно используемые аннотации. Если кто-то работал с этим методом, пожалуйста, поделитесь.

Вот как я это сделал.

View Controller:

import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {

    override var preferredStatusBarStyle: UIStatusBarStyle {
        .darkContent
    }

    @IBOutlet weak var mapView: MKMapView!

    let locations = [

        Location(title: "Dr. James Golf Course", latitude: 40.003252, longitude: -86.0655897),
        Location(title: "Avon Town Hall", latitude: 39.7636057, longitude: -86.4080829),
        Location(title: "Brookside Park", latitude: 39.7897185, longitude: -86.1070623)
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self
        annotationsOnMap()

    }

    func annotationsOnMap() {

        for location in locations {

            let annotations = MKPointAnnotation()

            annotations.title = location.title
            annotations.coordinate = CLLocationCoordinate2D(latitude: location.latitude, longitude: location.longitude)

            mapView.addAnnotation(annotations)

            let locationCoordinate2d = annotations.coordinate
            let span = MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1)
            let region = MKCoordinateRegion(center: locationCoordinate2d, span: span)

            mapView.setRegion(region, animated: true)
        }
    }
}

Модель данных:

import UIKit

struct Location {

    let title: String
    let latitude: Double
    let longitude: Double
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...