Отслеживание центра MKMapViewCoordinate

Мне нужно точно отслеживать centerCoordinate MKMapView, пока пользователь масштабирует/панорамирует карту, то есть между событиями regionWillChangeAnimated: и regionDidChangeAnimated:.

Я протестировал следующие подходы, пытаясь заблокировать MKAnnotation в центре карты. К сожалению, никто из них не работает достаточно хорошо:

  • Используя UIPanGestureRecognizer (как описано здесь): это работает очень хорошо, пока экран коснулся, но doesn ' t, пока карта будет анимирована после завершения жестта касания. Кроме того, обновления отстают от фактического centerCoordinate.

  • Используя UIScrollViewDelegate я подклассифицированный MKMapView для получения события scrollViewDidScroll:. Это сработало, но событие не запускается при каждом приращении прокрутки, что приводит к резким обновлениям.

  • Используя Уведомления KVO: следуя этой схеме, я попытался наблюдать за mapview centerCoordinate. Он работает для userLocation, но уведомления не отправляются для centerCoordinate.

Любые идеи о том, как эффективно и точно отслеживать centerCoordinate?

KVO казался лучшим выбором. Есть ли трюк, чтобы заставить его работать с свойством MKMapView centerCoordinate?

Ответ 1

Если я правильно понимаю, вы пытаетесь что-то сделать (аннотация в вашем случае), которая всегда находится в центре экрана, верно? Не уверен, для чего используется эта аннотация, но приемлемо ли размещать другой прозрачный вид поверх карты, которая выступает в качестве аннотации (вы также можете сделать этот вид того же размера, что и карта, и иметь подзадачу его в качестве аннотации). Это будет иметь тот же эффект для пользователя. Чем в этом регионе изменились, вы можете получить centerCoordinate и делать любую обработку, которую вам нужно сделать. Я не думаю, что вам нужно делать какую-либо обработку, поскольку пользователь нажимает или зажимает карту... Не говоря уже о том, что аннотации предназначены для фиксированной координаты.