2016-11-07 50 views
1

私はSwift 3でプロジェクトをやっています。地図の領域を色で塗りつぶします

マップでタッチしてポイントを選んだ後、ラインでリンクします。

私はこれらの点の間の領域を赤色で塗りつぶしましたが、成功しませんでした。これをどのように遂行できますか?

塗りつぶしの色をマップビューに設定しましたが、動作しません。

私はこれまでのところ、このコードを持っている:

import UIKit 
import MapKit 

class ViewController: UIViewController, MKMapViewDelegate { 
    @IBOutlet var map: MKMapView! 

    var points: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]() //all touched points 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     map.delegate = self 

     let latitude: CLLocationDegrees = 38.925560 
     let longitude: CLLocationDegrees = -9.229723 
     let lanDelta: CLLocationDegrees = 0.05 
     let lonDelta: CLLocationDegrees = 0.05 
     let span = MKCoordinateSpan(latitudeDelta: lanDelta, longitudeDelta: lonDelta) 
     let coordinates = CLLocationCoordinate2D(latitude: latitude, longitude: longitude) 
     let region = MKCoordinateRegion(center: coordinates, span: span) 

     map.setRegion(region, animated: true) 

     let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(ViewController.longpress(gestureRecognizer:))) 

     uilpgr.minimumPressDuration = 0.5 

     map.addGestureRecognizer(uilpgr) 
    } 

    func longpress(gestureRecognizer: UIGestureRecognizer) { 
     guard gestureRecognizer.state == .began else { return } 

     let touchPoint = gestureRecognizer.location(in: self.map) 
     let coordinate = map.convert(touchPoint, toCoordinateFrom: self.map) 
     let annotation = MKPointAnnotation() 

     annotation.coordinate = coordinate 
     annotation.title = "My Place" 
     map.addAnnotation(annotation) 

     // print("longpress activated") 
     points.append(annotation.coordinate) 

     let polyline = MKPolyline(coordinates: points, count: points.count) 
     map.add(polyline) 
    } 

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     let polylineRenderer = MKPolylineRenderer(overlay: overlay) 
     polylineRenderer.strokeColor = UIColor.blue 
     polylineRenderer.fillColor = UIColor.red 
     polylineRenderer.lineWidth = 5 
     return polylineRenderer 
    } 
} 
+0

あなたのエディションrmaddyに感謝します。まだこの作業を行うことはできません:( –

+0

[This](http://stackoverflow.com/questions/17132266/free-hand-drawing-in-google-maps-ios/40240153#40240153) –

答えて

1

MKPolyLineはラインをレンダリングします。塗りつぶしポリゴンが必要な場合は、MKPolyonが必要です。アウトラインと塗りの両方が必要な場合は、両方を使用します。

fileprivate var polygon: MKPolygon? = nil 

    func addPolygon() { 
      let polygon = MKPolygon(coordinates: &polygonCoordinates, count: polygonCoordinates.count) 
      self.polygon = polygon 
      mapView.add(polygon) 
    } 

    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     if let _ = overlay as? MKPolyline { 
      let renderer = MKPolylineRenderer(polyline: polyLine!) 
      renderer.strokeColor = UIColor.blue 
      renderer.lineWidth = 2 
      return renderer 
     } else { 
      let renderer = MKPolygonRenderer(polygon: polygon) 
      renderer.fillColor = UIColor.blue.withAlphaComponent(0.25) 
      return renderer 
     } 
    } 
関連する問題