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

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

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

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

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

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

Итак, решения следующие:

  1. Есть MKPolyline и MKPolylineView для рисования линий, MKPolygon и MKPolygonView для рисования многоугольников, MKCircle и MKCircleView для рисования кругов. Никто не подходит? Где дуга? О да. Теперь настоящее решение: вы создаете собственный класс, производный от MKOverlayPathView , и переопределяете метод -createPath , в -createPath вы создаете дугу, используя CGContextAddArcToPoint или другие функции, которые вам нравятся, и связываете только что созданный путь со свойством пути 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. Надеюсь на помощь
14
задан Shiny 25 May 2011 в 09:52
поделиться