2016-12-28 17 views
0

Я пытаюсь показать одно место назначения для двух или более разных местоположений контактов, но проблема в том, что когда я меняю местоположение вывода, маршруты не сбрасываются. Например, когда я начал приложение и установил местоположение, он показывает маршрут, но когда я добавляю или изменяю местоположение на карте, предыдущий маршрут не исчезает.Как показать полилинии двух или более разных контактов для одного пункта назначения?

Первый взгляд Directions http://i.hizliresim.com/kGOvy9.png

Второй Вид Directions http://i.hizliresim.com/pX6Ppn.png

// Добавление или изменение местоположения назначения штифтом

@IBAction func longpress(_ sender: UILongPressGestureRecognizer) { 

    let location = sender.location(in: self.map) 
    let locCoordinate = self.map.convert(location, toCoordinateFrom: self.map) 

    annotation.coordinate = locCoordinate 
    annotation.title = "Store" 
    annotation.subtitle = "Location of Store" 

    self.map.addAnnotation(annotation) 

    annotationLat = annotation.coordinate.latitude 
    annotationLong = annotation.coordinate.longitude 

    for item in arr { 
     let dic = item as? [String: Any] 
     pinDestinations(lat: dic?["lat"] as! CLLocationDegrees, long: dic?["long"] as! CLLocationDegrees) 
    } 

    let directions = MKDirections(request: request) 

    directions.calculate { [unowned self] response, error in 
     guard let unwrappedResponse = response else { return } 

     for route in unwrappedResponse.routes { 
      // I tried here remove previous polyline while i'm adding new one 
      self.map.removeOverlays([route.polyline]) 
     } 
    } 


func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer { 
    let renderer = MKPolylineRenderer(polyline: overlay as! MKPolyline) 

    renderer.strokeColor = UIColor.blue 
    renderer.lineWidth = 1 
    return renderer 
} } 

ответ

0

Вы можете определить свойство отслеживать ранее добавленных полилинию:

var polylines: [MKPolyline]? 

Затем, когда вы обновляете направления, удалите старые ломаные линии (если таковой имеется) с карты, обновление полилинии с новыми значениями, а затем добавьте их на карту:

func updateDirections() { 
    let request = ... 

    let directions = MKDirections(request: request) 
    directions.calculate { response, error in 
     guard let response = response, error == nil else { 
      print("\(error)") 
      return 
     } 

     if let polylines = self.polylines { 
      self.mapView.removeOverlays(polylines) 
     } 

     self.polylines = response.routes.map { $0.polyline } 
     self.mapView.addOverlays(self.polylines!) 
    } 
} 
+0

Спасибо, сэр, это отчасти сработало! Когда я пытаюсь сделать это с двумя и более контактами, он работает неправильно. Он показывает одну полилинию для одного из контактов. – GreatCornholio

+0

Да, я написал его только для одного набора направлений между двумя точками, но идея такая же, независимо от того, сколько у вас есть. Просто сохраните свои соответствующие полилинии в каком-либо свойстве, которое вы можете легко удалить с карты, прежде чем пересчитывать направления и заменять полилинии новыми. Я не уверен, знаю ли я вашу модель достаточно хорошо, чтобы сообщить вам о ваших подробностях (например, я мог бы представить, а не простой массив «MKPolyline», у вас может быть массив массивов или словарь массивов и как-то убедиться, что вы удаляете и заменяете правильный массив), но, надеюсь, вы получите основную идею. – Rob

 Смежные вопросы

  • Нет связанных вопросов^_^