Вот пример изображения:
Теперь я хочу удалить наложение между 5 и 6 аннотациями. Вот фрагмент кода, который я пробовал до сих пор:
Функция для создания полилинии
func createPolyline() {
if (arrTempFootStepsLocation.count>0){ //This array contains all the coordinates from starting annonation 1 to 6
let points:[CLLocationCoordinate2D] = arrTempFootStepsLocation
let geodesic = MKGeodesicPolyline(coordinates: points, count: points.count)
mapService.addOverlay(geodesic)
}
}
Функция создания аннотаций
func addAnnotations() {
if let arrProof = arrTempProof{ //This array contains 6 coordinates which are taken from arrTempFootStepsLocation only to create annotation
for (index , modelPhotoProof) in arrProof.enumerated() {
if (modelPhotoProof.locationPoint?.latitude != 0.0 && modelPhotoProof.locationPoint?.longitude != 0.0){
let CLLCoordType = CLLocationCoordinate2D(latitude: modelPhotoProof.locationPoint!.latitude, longitude: modelPhotoProof.locationPoint!.longitude)
let anno = MyMKPointAnnotation()
anno.tag = index
anno.coordinate = CLLCoordType
mapService.addAnnotation(anno)
}
}
}
}
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if view.annotation is MyMKPointAnnotation {
if arrRemovalAnnotationPoint.count<2{ //This array contains selected annotation coordinates
arrRemovalAnnotationPoint.append((view.annotation?.coordinate)!)
print("Annotation point inserted.")
}
}
}
Удалить наложение между двумя аннотациями
@IBAction func btnDeletePolylinesPressed(_ sender:UIButton){
if arrRemovalAnnotationPoint.count == 2 {
//Find the index of those two annotations from arrTempFootStepsLocation
let firstAnnoIndex = arrTempFootStepsLocation.index(where: {$0.latitude == arrRemovalAnnotationPoint.first?.latitude && $0.longitude == arrRemovalAnnotationPoint.first?.longitude})
let lastAnnoIndex = arrTempFootStepsLocation.index(where: {$0.latitude == arrRemovalAnnotationPoint.last?.latitude && $0.longitude == arrRemovalAnnotationPoint.last?.longitude})
//prepare array to remove coordinates between those two annotations
if let first = firstAnnoIndex, let last = lastAnnoIndex{
var arrToRemoved = [CLLocationCoordinate2D]()
if first > last {
arrToRemoved = Array(arrTempFootStepsLocation[last...first])
for i in 0..<arrToRemoved.count{
let itemToBeRemoved = arrToRemoved[i]
for j in 0..<arrTempFootStepsLocation.count - 1 {
let itemOriginal = arrTempFootStepsLocation[j]
if (itemToBeRemoved.latitude == itemOriginal.latitude && itemToBeRemoved.longitude == itemOriginal.longitude){
arrTempFootStepsLocation.remove(at: j)
}
}
}
mapService.removeOverlays(mapService.overlays)
self.perform(#selector(self.createPolyline()), with: nil, afterDelay: 0.8)
}
else {
arrToRemoved = Array(arrTempFootStepsLocation[first...last])
for i in 0..<arrToRemoved.count{
let itemToBeRemoved = arrToRemoved[i]
for j in 0..<arrTempFootStepsLocation.count - 1 {
let itemOriginal = arrTempFootStepsLocation[j]
if (itemToBeRemoved.latitude == itemOriginal.latitude && itemToBeRemoved.longitude == itemOriginal.longitude){
arrTempFootStepsLocation.remove(at: j)
}
}
}
mapService.removeOverlays(mapService.overlays)
self.perform(#selector(self.createPolyline()), with: nil, afterDelay: 0.8)
}
}
arrRemovalAnnotationPoint.removeAll()
}
}
Теперь проблема в том, что когда я нажимаю кнопку удаления, она не очищает все координаты между этими аннотациями. Теперь, когда я перерисовываю полилинию, она все еще соединяется между этими аннотациями.
Что не так в моем коде? Есть ли другой способ сделать это? Любая помощь будет оценена.