Подтвердить что ты не робот

Как очистить кеш MKMapView?

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

- (void)mapViewWillStartLoadingMap:(MKMapView *)mapView;
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView;
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error;

когда-либо называются. Вызываемые только методы:

- (void)mapView:(MKMapView *)mapView regionWillChangeAnimated:(BOOL)animated;
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated;

Похоже, что ios4 кэширует изображения с изображениями на карте.

Я нашел эти строки в документации по протоколу MKMapViewDelegate. Выделенная линия - моя проблема.

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

Мне нужно выполнить определенные операции после загрузки карты, но поскольку ни один из вышеперечисленных методов делегата не вызван, я не могу выполнить желаемую функциональность. Может ли кто-нибудь предложить исправление, чтобы очистить кеш или предоставить альтернативное решение для этого? Я уже пробовал использовать описанные методы здесь и , но мне все еще не удалось получить код работа.

4b9b3361

Ответ 1

Я думаю, вы можете пара willStartLoadingMap, didFinishLoadingMap и regionDidChange, например:

  • в willStartLoadingMap установите флаг loading в true:
  • в didFinishLoadingMap установите для загрузки flag значение false, а также проверьте, есть ли у вас очередь для вызова метода, который захватывает экран. Если да, назовите его,
  • в regionDidChange проверьте флаг loading, и если он установлен на false, вызовите метод, который захватывает экран. В противном случае ставьте его так, чтобы он выполнялся при завершении загрузки карты.

Таким образом, вы уверены, что захватили экран после того, как плитки были загружены.

Однако regionDidChange можно вызывать много раз, поэтому убедитесь, что вы захватываете экран только в том случае, если вид карты сильно изменяется (вы можете сравнить предыдущую область/центр карты и текущий регион/центр карты для этого).

Ответ 2

Я создал новый проект и связал делегата с моим контроллером. Вызываются первые два метода этих трех. Поскольку он загружает все плитки, метод делегирования ошибок не вызывался.

Недавно я столкнулся с подобными проблемами. Я подклассифицировал MKMapView и забыл установить делегат в моих пользовательских методах init и в awakeFromNib:. Возможно, это и приводит к вашим проблемам.