Вопрос:

В iOS MapKit, как вы анимируете аннотацию при вращении карты?

ios swift mapkit

310 просмотра

1 ответ

991 Репутация автора

Таким образом, я могу создавать аннотации, которые я наклеиваю на карту, и я могу создавать наложения, скажем, полигоны или полилинии, и отображать их на карте с помощью средств визуализации по умолчанию. Все работает как положено.

И я даже могу создать вид аннотации с пользовательским изображением, нарисованным с ориентацией. Проблема в том, что я не могу получить уведомление, когда карта вращается, но только когда она завершена, и я хотел бы изменить вид аннотации, когда карта вращается (поскольку моя аннотация включает в себя ориентацию).

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

Чтобы проверить, я создал подкласс MKPolylineRendererи переопределил метод draw. И, глядя на координату линии:

self.polyline.points()[0]

Это выглядит хорошо, я думаю, например,

MKMapPoint(x: 263670550.06153709, y: 169200197.90301803)

Но каждый раз, когда я пытаюсь преобразовать эту точку карты в CGPoint, координата y всегда равна 0, а координата x кажется слишком большой:

let point = self.point(for: self.polyline.points()[0])
-> (52506.4039975107, 0.0)

Если я вызываю метод рисования моего суперкласса, я вижу свою ломаную линию, и первая точка определенно не при y = 0, но я не могу получить ничего в моем переопределенном методе, чтобы показать (опять же, по-видимому, из-за проблем с регистрацией, но не конечно). Я последовал этому совету:

Пользовательская функция drawMapRect MKOverlayRenderer не рисует полигоны

Есть идеи?

Автор: rjcarr Источник Размещён: 08.11.2017 10:15

Ответы (1)


0 плюса

148 Репутация автора

В методе MKMapViewDelegate у вас есть функция, которая, безусловно, может вам помочь. В моем приложении мне это удалось.

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    let overlayRenderer = MKCircleRenderer(circle: overlay as! MKCircle)
    overlayRenderer.fillColor = UIColor.green
    overlayRenderer.alpha = 0.2
    return overlayRenderer
}

И в функции, которая используется, чтобы найти моего пользователя:

//Overlays
let circleDraw = MKCircle(center: coordinates, radius: 
UI_mapView.add(circleDraw)

Надеюсь, это поможет.

Автор: schtipoun Размещён: 08.11.2017 10:30
Вопросы из категории :
32x32