Вы удаляете ваш пин-код из mapView, но вы не удаляете его из массива pins
.Итак, когда вы создаете новый вывод, вы всегда основываете его координату x на исходных выводах, которые вы добавили в массив (и впоследствии удалили из mapView
).
Аналогичным образом вы добавляете новый вывод в mapView, но не добавляете его в массив pins
.Поэтому вы никогда не удаляете эти новые выводы из mapView
, так как вы удаляете только выводы из mapView, когда просматриваете массив pins
.
Например, ваш arrangePins
метод может выглядетьнапример:
func arrangePins() {
var newPins:[MyPin] = []
for pin in pins {
let coord = pin.coordinate
let title = pin.title!
self.mapView.removeAnnotation(pin)
var newCoord = MKMapPoint(coord)
newCoord.x = self.mapView.visibleMapRect.minX + 250
let newPin = MyPin(newCoord.coordinate, title)
mapView.addAnnotation(newPin)
newPins.append(newPin)
}
pins = newPins
}
(Чтобы упростить задачу, я добавил новые выводы в массив newPins
, а затем использовал его для замены массива pins
после цикла for.)
Несколько вещей, которые вы можете рассмотреть:
- Вместо того, чтобы поддерживать свой собственный массив
pins
, вы можете просто использовать mapView.annotations
(конечно, это предполагает, что вы настраиваете все контакты накарта, может быть, вы хотите настроить только некоторые конкретные контакты) - Вместо того, чтобы удалять и добавлять контакты, почему бы вам просто не переместить контакты?Например, метод
arrangePins
может выглядеть следующим образом:
func arrangePins() {
for pin in pins {
var newCoord = MKMapPoint(pin.coordinate)
newCoord.x = self.mapView.visibleMapRect.minX + 250
pin.coordinate = newCoord.coordinate
}
}