Как нарисовать линию дуги / кривой с помощью MKOverlayView на MKMapView - PullRequest
13 голосов
/ 15 апреля 2011

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

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

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

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

  1. просто нарисуйте путь дуги на карте
  2. просто нарисуйте изображение на карте
  3. объединение пути дуги и изображения в качестве наложения на карту

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

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

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

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

Ответы [ 2 ]

1 голос
/ 21 февраля 2013

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

1 голос
/ 15 апреля 2011

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

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

...