Как оживить перемещение MKOverlay на MKMapView Swift - PullRequest
0 голосов
/ 17 октября 2018

Я работаю над приложением карты, в котором мне нужно оживить движение самолета, основываясь на местоположении пользователя

Так что я реализовал пользовательский класс MKPlaneAndArrow, создав подклассы MKOverlay

class MKPlaneAndArrow : NSObject, MKOverlay {

  //@objc dynamic var coordinate: CLLocationCoordinate2D
  //the above method also does not change location

  //to change the coordinate after initialization
  var coordinate: CLLocationCoordinate2D {
    willSet {
      willChangeValue(forKey: #keyPath(coordinate))
    }
    didSet {
      didChangeValue(forKey: #keyPath(coordinate))
    }
  }

  var boundingMapRect: MKMapRect

  init( center: CLLocationCoordinate2D, boundingMapRect_: MKMapRect) {

    self.coordinate = center
    self.boundingMapRect = boundingMapRect_

  }

}

Теперь, когда вызывается делегат местоположения didUpdateLocations, я хочу изменить координату наложения MKPlaneAndArrow на текущую координату местоположения, поэтому я написал следующее внутри didUpdateLocations

    //if not already added annotation
if !HomeVC.flagAlreadyAddedPlaneAnnotation {

    let planeAndArrow = MKPlaneAndArrow.init(center: lastUserLocation.coordinate, boundingMapRect_: mapRect)
    mapView.add(planeAndArrow)
    //Did updateLocations will not add the annotation again
    HomeVC.flagAlreadyAddedPlaneAnnotation = true

}
//get last user location
guard let lastUserLocation:CLLocation = locations.last  else {
    print("no location")
    return
}
 //change coordinate of `MKPlaneAndArrow` overlay
for overlay in mapView.overlays {

    if let myPlane = overlay as? MKPlaneAndArrow {
     myPlane.coordinate = lastUserLocation.coordinate 
    }
}

У меня установлены контрольные точки, и они достигают линии myPlane.coordinate = ... Но я не знаю, почему на земле изменение координат не видно на карте


Анимация

Если приведенный выше код меняет координату, он не будет анимировать изменение.Я тоже хочу это оживить.Как и перемещение местоположения пользователя на Картах Google или картах Apple

Мне удалось изменить координату MKAnnotation с помощью анимации.Но с наложением я искал несколько часов, но не смог найти решение

Я видел следующие вопросы по SO вместе со многими другими

Примечания:

  • Невозможно использовать MkAnnotation, поскольку при увеличении они остаются одинакового размера, тогда как размеры наложения соответствуют масштабу увеличения

  • Если вам нужноMKOverlayRenderer класс, просто спросите в комментариях.Мой рендерер просто рисует изображение, используя `context.draw

Заранее спасибо

...