Я работаю над приложением карты, в котором мне нужно оживить движение самолета, основываясь на местоположении пользователя
Так что я реализовал пользовательский класс 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
Заранее спасибо