How to make custom MKPolyline in SWIFT with additional argument - color

☆樱花仙子☆ 提交于 2019-12-04 03:18:18

问题


Can any help me with making custom MKPolyline with additional argument Color?

CustomPolyline.swift

import Foundation
import MapKit
class CustomPolyline : MKPolyline {
    let coordinates: UnsafeMutablePointer<CLLocationCoordinate2D>
    let count : Int = 0
    let color : String = "ff0000"
    init(coordinates: UnsafeMutablePointer<CLLocationCoordinate2D>, count: Int, color: String) {

        self.coordinates = coordinates
        self.count = count
        self.color = color
    }
}

Init

Polyline = CustomPolyline(coordinates: &Path, count: Path.count, color: "ff0000")
self.mapView.addOverlay(Polyline)

func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {      
        if (overlay is CustomPolyline) {
            var pr = MKPolylineRenderer(overlay: overlay);
            pr.strokeColor = UIColor.colorWithRGBHex(0xff0000).colorWithAlphaComponent(0.5);
            pr.lineWidth = 10;
            return pr;
        }

        return nil
    }

My solution doesn't work and I can't figure it out why. Polylines isn't visible at all. I'm a beginner in SWIFT so I think that problem is with my CustomPolyline class. Thanks for help.


回答1:


It can be done much more simpler than I throught:

Class

import Foundation
import MapKit

class CustomPolyline : MKPolyline {

    var color: String?
}

Init

cPolyline = CustomPolyline(coordinates: &Path, count: Path.count)
cPolyline.color = "#ff0000"
self.mapView.addOverlay(cPolyline)

func mapView(mapView: MKMapView!, rendererForOverlay overlay: CustomPolyline!) -> MKOverlayRenderer! {      

            var pr = MKPolylineRenderer(overlay: overlay);
            pr.strokeColor = UIColor(rgba: overlay.color);
            pr.lineWidth = 10;
            return pr;

    }



回答2:


As user3470987 pointed out, there might be an issue in modifying the default 'rendererForOverlay' delegate function. It could also prove difficult if you'd like to add overlays of other types than MKPolyline.

Class

import Foundation
import MapKit

class Polyline: MKPolyline {
    var color: UIColor?
}

Render function

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

    if let polyline = overlay as? Polyline {

        let polylineRenderer = MKPolylineRenderer(overlay: polyline)
        polylineRenderer.strokeColor = polyline.color
        polylineRenderer.lineWidth = 3
        return polylineRenderer
    }

    return MKOverlayRenderer(overlay: overlay)

}



回答3:


Another solution most easy:

extension UIColor {
    static var rendererColor: UIColor {
        return UIColor(red: 65/255, green: 65/255, blue: 65/255, alpha: 1)
    }
}

And the use:

renderer.strokeColor = UIColor.renderer


来源:https://stackoverflow.com/questions/26010977/how-to-make-custom-mkpolyline-in-swift-with-additional-argument-color

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!