Я начинающий разработчик Swift и создаю приложение, которое отслеживает местоположение городских автобусов на карте.
Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы MKAnnotations плавно перемещались между позициями GPS (от старого к тому, что находится в свежем JSON), вместо того, чтобы удалять и снова появляться.
Пока что мое приложение получает JSON, который декодируется в массив объектов, подчиняющихся протоколу MKAnnotation.
Затем я отображаю их все на карте следующим способом:
func updateUI(json: MyModelClass) {
mapView.removeAnnotations(mapView.annotations)
mapView.addAnnotations(json.busArray)
}
JSON загружается каждые 10 секунд и запускает метод updateUI
, удаляя существующие примечания MKA и добавляя новые.
Буду очень признателен за любой совет.
В случае необходимости вот модель:
struct MyModelClass: Codable {
let busArray: [Bus]
enum CodingKeys: String, CodingKey {
case busArray = "result"
}
init(busArray: [Bus]) {
self.busArray = busArray
}
}
class Bus: NSObject, Codable, MKAnnotation {
let latitude, longitude: Double
let time, title, brigade: String?
var coordinate: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 52.22977, longitude: 21.01178)
enum CodingKeys: String, CodingKey {
case latitude = "Lat"
case longitude = "Lon"
case time = "Time"
case title = "Lines"
case brigade = "Brigade"
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.latitude = try container.decode(Double.self, forKey: .latitude)
self.longitude = try container.decode(Double.self, forKey: .longitude)
self.title = try container.decode(String.self, forKey: .title)
self.time = try container.decode(String.self, forKey: .time)
self.brigade = try container.decode(String.self, forKey: .brigade)
self.coordinate = CLLocationCoordinate2D(latitude: CLLocationDegrees(latitude), longitude: CLLocationDegrees(longitude))