swift - 无法在 Swift 中通过 MapKit 绘制折线

标签 swift mapkit

我正在尝试在我的 map 上的两个注释之间画一条线。代码有效,但我没有在 map 上看到它。这是我的代码:

func longPressGesture()
{
    let lpg = UILongPressGestureRecognizer(target: self, action: "longPressAction:")
    lpg.minimumPressDuration = 1;
    Map.addGestureRecognizer(lpg)
}

func longPressAction(myRecognizer : UILongPressGestureRecognizer)
{
    let currPoint = myRecognizer.locationInView(Map)
    let point = Map.convertPoint(currPoint, toCoordinateFromView: Map)
    points.append(currPoint);
    if(points.count>1)
    {
        let startPoint = Map.convertPoint(points[points.count-2], toCoordinateFromView: Map)
        let endPoint = Map.convertPoint(currPoint, toCoordinateFromView: Map)
        var lineCoords = [startPoint,endPoint]
        var line = MKPolyline(coordinates: &lineCoords, count: 2)
        Map.addOverlay(line)
    }
    let myAnnotation = MKPointAnnotation();
    myAnnotation.coordinate = point
    myAnnotation.title = "Test"
    myAnnotation.subtitle = "Test subtitle"
    Map.addAnnotation(myAnnotation);
}

mapView方法(不确定是否使用,我是swift新手,我没有写这个):

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer {
    print(overlay)
    if overlay is MKCircle {
        let circle = MKCircleRenderer(overlay: overlay);
        circle.strokeColor = UIColor.redColor();
        circle.fillColor = UIColor(red: 255, green: 0, blue: 0, alpha: 0.1);
        circle.lineWidth = 1;
        return circle;
    }else  if overlay is MKTileOverlay {
        let carte_Renderer = MKTileOverlayRenderer(overlay: overlay)
        carte_Renderer.alpha = 1
        return carte_Renderer
    }else if overlay is MKPolyline {
        let polylineRenderer = MKPolylineRenderer(overlay: overlay);
        polylineRenderer.strokeColor = UIColor.blueColor();
        polylineRenderer.lineWidth = 5;
        return polylineRenderer;
    }else {
        return MKPolylineRenderer();
    }
}

最佳答案

确保您有一个 rendererForOverlay 方法,它定义了您的 MKPolyline 对象的外观。

您还需要包含 MKMapViewDelegate 才能正常工作。

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer!
{
    if overlay is MKPolyline
    {
        let route: MKPolyline = overlay as MKPolyline
        let routeRenderer = MKPolylineRenderer(polyline:route)
        routeRenderer.lineWidth = 3.0
        routeRenderer.strokeColor = UIColor(red: 45.0/255.0, green: 200.0/255.0, blue: 0.0/255.0, alpha: 1);

        return routeRenderer
    }
    return nil
}

关于swift - 无法在 Swift 中通过 MapKit 绘制折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38628876/

相关文章:

ios - 如何仅设置苹果 Logo 图像以使用苹果按钮登录

iphone - iOS 6 iPhone 应用程序——如何仅缩放到用户位置一次?

iOS 6 MapKit VoiceOver 在 Pins 之前读取 POI

objective-c - annotationView didChangeDragState 被多次触发

ios - 在iphone mkmapview中获取触摸 map 的当前位置

ios - 根据所选注释对各个页面进行 Mapkit 标注

ios - 如果触摸了 UITableViewCell 以外的任何地方,则关闭模式

ios - 确保在正确的时间 ios 交付 UILocalNotification

swift - 我可以/如何用 RC3 替换我的 KVO 东西?

xcode - Swift:更改 NSbutton 的字体和样式