2016-06-14 11 views
1

Ich versuche, eine Halbkugel auf MKMapView zu zeichnen, die Mittelpunktkoordinaten, Anfangs- und Endwinkel und den Radius in nautischen Meilen kennt.Swift: Zeichnen Sie eine Halbkugel in MKMapView

Mit diesem Thread (How to draw UIBezierPath overlay on MKMapView?), ich habe subclassed MKOverlayPathRenderer einen Bogen zu zeichnen:

import UIKit 
import MapKit 
class IGAAcarsDrawArc: MKOverlayPathRenderer 
{ 
    let PI = 3.14159265 
    let radius : CGFloat = 10.0 
    var startAngle: CGFloat = 0 
    var endAngle: CGFloat = 3.14159 
    var latitude = 25.96728611 
    var longitude = -80.453019440000006 

    override func createPath() 
    { 
     let line = MKPolyline() 

     let arcWidth: CGFloat = 5 

     let path = UIBezierPath(arcCenter: CGPointMake(CGFloat(latitude), CGFloat(longitude)), 
           radius: self.radius, 
           startAngle: startAngle, 
           endAngle: endAngle, 
           clockwise: true) 

     path.lineWidth = arcWidth 
     path.stroke() 
    } 
} 

Nun, es ist nicht klar, wie verwende ich diese MKPolyline erstellen und implementieren in mapView (mapView: MKMapView, RendererForOverlay Overlay: MKOverlay).

Dieser Thread (How to draw arc/curve line with MKOverlayView on MKMapView) wirft auch nicht zu viel Licht auf das Problem.

Kann jemand bitte helfen, einen Bogen in MKMapView zu zeichnen?

EDIT:

Dies funktioniert nicht:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer 
{ 
    if overlay is IGAAcarsDrawArc 
     { 
      let arcLine = IGAAcarsDrawArc(overlay: overlay) 

      arcLine.lineWidth = 8 
      arcLine.strokeColor = UIColor.magentaColor() 
     } 


     return MKPolylineRenderer() 
} 

Vielen Dank!

+0

Ich fand http://stackoverflow.com/questions/12062902/how-to-add-a-uibierpath-to-a-kmmapview-using-overlays Vielleicht gibt es Ihnen einige Hinweise – wenqi

+0

Ich fand diesen Beitrag: http : //stackoverflow.com/questions/12062902/how-to-add-a-uibezierpath-to-a-kmmapview-using-overlays Vielleicht gibt es Ihnen einige Hinweise – wenqi

Antwort

0

Sie sollen nicht den Weg zeichnen, aber es auf die path Eigenschaft der Renderer zuweisen:

Subklassen es außer Kraft setzen sollte und es verwenden, den CGPathRef Datentyp zu schaffen für das Zeichnen verwendet werden sollte. Nachdem Sie den Pfad erstellt haben, sollte Ihre Implementierung ihn der Pfadeigenschaft zuweisen.

So

override func createPath() 
{ 
… 
    let path = UIBezierPath(arcCenter: CGPointMake(CGFloat(latitude), CGFloat(longitude)), 
          radius: self.radius, 
          startAngle: startAngle, 
          endAngle: endAngle, 
          clockwise: true) 

    path.lineWidth = arcWidth 
    self.path = path.cgPath // assign instead of stroke 
} 

in Safari typisiert.

+0

Vielen Dank. Ich habe es jedoch schon probiert. Ich glaube, es funktioniert nicht für UIBezierPath, da der folgende Fehler angezeigt wird: "Wert vom Typ 'UIBezierPath' hat kein Mitglied 'cgPath'. –

+0

Natürlich ist es' CGPath'. Typo. Wenn dies jedoch der Fehler ist, einfach Erzeuge eine Instanz von 'CGPath' direkt. –