Подтвердить что ты не робот

Как рисовать линию дуги/кривой с помощью MKOverlayView на MKMapView

Теперь нужна помощь. Я могу рисовать линии с помощью MKPolyline и MKPolylineView, но как рисовать линии дуги или кривой между двумя координатами на MKMapView? Большое спасибо.

Окончательное решение

Наконец, я написал себе эти выводы, чтобы помочь тем, кто этого хочет.

Если вы хотите:

  • просто нарисуйте дугу на карте
  • просто нарисуйте изображение на карте
  • объединить путь дуги и изображение как оверлей на карте

Итак, решения:

  • Есть MKPolyline и MKPolylineView для рисования линий, MKPolygon и MKPolygonView для рисования полигонов, MKCircle и MKCircleView, чтобы нарисовать круги. Никто не подходит? Где дуга? О да. Теперь действительно решение: вы создаете пользовательский класс из MKOverlayPathView и переопределяете метод -createPath, в -createPath вы создаете использование дуги CGContextAddArcToPoint или другие функции, которые вам нравятся, и сопоставьте путь, который вы только что создали, к свойству пути MKOverlayPathView, и пользовательские работы будут выполнены. Затем вы добавляете MKPolyline на карту (да! Просто MKPolyline!), Затем в методе -mapView: viewForOverlay: вы создаете пользовательский класс для этой полилинии. Затем просто запустите его, все работает по вашему желанию. Магия? вы можете нарисовать MKPolyline как дугу!
  • Просто изображение? Используйте MKAnnotationView. Это сделано! ты можешь это сделать! Я верю, что!
  • В моей проблеме я хочу нарисовать дугу с изображением в оверлее. Поэтому я создаю пользовательский класс, соответствующий протоколу MKOverlay, и пользовательский класс, полученный из MKOverlayView, чтобы нарисовать этот оверлей. Все работает отлично, но я не могу нарисовать какой-либо путь на карте! Я установил lineWidth в 1,2,3,4... но это не сработало! Ах.. в решении задается ширина линии с помощью функции MKRoadWidthAtZoomScale (zoomScale), и вы можете увидеть путь! Это сделано......

И некоторые советы здесь:

  • Используйте Core Graphic для рисования путей, а не координат MapKit и координат UIView!
  • В функциях CG просто имейте в виду, что ширина строки должна быть преобразована этой функцией: MKRoadWidthAtZoomScale (zoomScale)
  • Надеемся помочь.
4b9b3361

Ответ 1

Считывая документацию, кажется, что вы можете создать экземпляр MKOverlayPathView и назначить произвольный объект CGPathRef его свойству path. Этот путь может содержать как прямые, так и дуги.

Я не знаю (и в документации не упоминается), в каком формате должны стоять координаты пути (MKMapPoint или CLLocationCoordinate2D), но вы, вероятно, можете найти это, поэкспериментируя немного.

Ответ 2

Вы уже сами ответили на свой комментарий, но я хотел бы указать всем на отличный проект AIMapViewWrapper на GitHub, который включает в себя пример кода для построения траектории дуги по набору координат. В этом проекте он используется для рисования пути, который принимает плоскость, включая теневой путь под ним (и другие вещи, такие как анимация плоскости вдоль этого пути). Может пригодиться, если кто-то упирается в это.