Если вы обновите координату аннотации с помощью метода setCoordinate (или его эквивалента), представление карты автоматически обновит положение аннотации в представлении. Эта страница в документах гласит следующее:
Важное замечание: При реализации свойства координаты в вашем классе рекомендуется синтезировать его создание.Если вы решили реализовать методы для этого свойства самостоятельно или если вы вручную изменили переменную, лежащую в основе этого свойства в других частях вашего класса, после добавления аннотации на карту, обязательно отправьте наблюдения значения ключа (KVO)уведомления, когда вы делаете.Map Kit использует уведомления KVO для обнаружения изменений в координатах, заголовке и свойствах субтитров ваших аннотаций и внесении любых необходимых изменений в отображение карты.Если вы не отправляете уведомления KVO, положение ваших аннотаций может не обновляться должным образом на карте.
Представлению карты будет известно только о том, что оно перечитывает свойство координат аннотации, если оносказал (через КВО), что координата изменилась.Один из способов сделать это - реализовать метод setCoordinate и вызывать его везде, где у вас есть код, который обновляет местоположение аннотации.
В своем коде вы пересчитываете координату в самом свойстве только для чтения.Что вы можете сделать, это добавить это в файл аннотации .m (и в .h):
- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate
{
//do nothing
}
и в том месте, где вы обновляете местоположения, вызвать метод setCoordinate для аннотации:
[someAnnotation setCoordinate:someAnnotation.coordinate];
Вы можете сделать это в том месте, где вы в настоящее время удаляете / повторно добавляете аннотации.
Вышеприведенный вызов выглядит забавно, потому что у вас есть пересчет координат в методе координат-получателя.Хотя это должно работать как быстрое исправление / тестирование, я не рекомендую использовать его регулярно.
Вместо этого вы можете пересчитать местоположение аннотации снаружи (где вы в настоящее время удаляете / повторно добавляете аннотации) ипередать новую координату в setCoordinate.Ваш объект аннотации может сохранить свое новое местоположение в имеющихся у вас в настоящее время широтах и долголетах (установите их в setCoordinate и используйте только те, которые создают CLLocationCoordinate2D для возврата из получателя) или (лучше) используйте сам координатный ивар (установите его вsetCoordinate и вернуть его в получатель).