2016-11-04 11 views
0

В настоящее время я работаю с быстрым 3 - xcode.Создайте линию из двух заданных точек

У меня есть viewcontroller с картой.

Я имел аннотации к карте, так что, когда я longpress карту добавить аннотацию, как это:

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

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

     longPressRec.minimumPressDuration = 1.5 //time for pressing : seconds 

     map.addGestureRecognizer(longPressRec) 
} 

добавления аннотаций:

func longpress(gestureRecognizer: UIGestureRecognizer){ 


    let touchPoint = gestureRecognizer.location(in: self.map) 

    let coord = map.convert(touchPoint, toCoordinateFrom: self.map) 




    let annotation = MKPointAnnotation() 

    annotation.coordinate = coord 

    annotation.title = "Point X" 

    map.addAnnotation(annotation) 

    print(coord.latitude) 
    print(coord.longitude) 

    var lastLocation = locationManager.location!  //last location 
    var currentLocation = locationManager.location!  //current location 


    if locationSet == false { 

     let firstLocation = locationManager.location! //first point 

     locationSet = true 

    } 

    else { //after second point 

     let currentLocation: CLLocation = locationManager.location! 

     var locations = [lastLocation, currentLocation] 
     var coordinates = locations.map({(location: CLLocation) -> CLLocationCoordinate2D in return location.coordinate}) 


     var polyline = MKPolyline(coordinates: coordinates, count: locations.count) 
     map.add(polyline) 



    } 









} 

MapView:

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

    //if overlay is MKPolyline { 
     print("Generating Polyline") 
     var renderer = MKPolylineRenderer(overlay: overlay) 
     renderer.strokeColor = UIColor.blue 
     renderer.lineWidth = 4 
     return renderer 

    // } 

} 

Теперь я хотел бы нарисовать линию на карте между вторым аннотацией и первой аннотацией каждый раз, когда я долго на карте.

Как я могу это сделать?

EDIT: Я пытался сделать это, но я не в состоянии. Это то, что я до сих пор ...

+0

Что делать, если вы долго нажимаете свою карту 3 раза? Вы хотите нарисовать линию между вторым и третьим точками? –

+0

Существует 50 способов сделать это. Как насчет того, как вы попытаетесь понять это сами, и когда вы потерпите неудачу, покажите нам свой код. – Sethmr

+0

Если я коснусь, скажем, 5 раз, он должен сделать 4 строки: коснитесь 1 до 2, коснитесь 2 до 3, коснитесь 3 до 4, коснитесь 4 до 5. Как путь ... Я пытаюсь это сделать, но без успеха –

ответ

0

Чтобы нарисовать линию вы реализуете метод mapViewDelegate:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
     let renderer = MKPolylineRenderer(polyline: polyLine!) 
     renderer.strokeColor = UIColor.blue 
     renderer.lineWidth = 1 
     return renderer 
    } 

Чтобы преобразовать сенсорный точку в координатах построить свой MKPolyLine вы используете:

mapView.convert(touchPoint, toCoordinateFrom: mapView) 
+0

Можете ли вы дать дополнительную помощь, пожалуйста , Я не знаю, как это реализовать ... Я был бы так благодарен. Я имею в виду, что я пытался добавить этот код, но без каких-либо успехов. –

+0

Я вроде как застрял здесь. Может кто-нибудь помочь? Пожалуйста, –

+0

Мне не удалось это сделать, но спасибо в любом случае –