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

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

CustomPolyline.swift

  • Remote console.log() on iOS devices
  • How to know Push Notification delivery status
  • iOS Web App touch gestures
  • iOS: Resize UIWebView after didFinishLoad (content should fit without scrolling)
  • React Native: Linking API not discovering Uber app
  • How to use LUT png for CIColorCube filter?
  • 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.

    2 Solutions Collect From Internet About “How to make custom MKPolyline in SWIFT with additional argument – color”

    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;
    
        }
    

    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)
    
    }