2016-02-22 2 views
0

Я пытаюсь добавить индикатор активности при обновлении аннотации на карте. Но, похоже, это не так. Экран приложения отключается и становится замороженным после запуска процесса обновления, поэтому, вероятно, индикатор активности не отображается.Обновление аннотаций на карте асинхронно с приложением

Мой вопрос: возможно ли обновлять аннотации на карте асинхронно с приложением, поэтому индикатор активности будет виден.

Я считаю, что это действительно раздражает, если пользователь не видит индикатор, если он занимает больше 2 секунд.

Решение:

self.activityIndicator.startAnimating() 
dispatch_after(DISPATCH_TIME_NOW, dispatch_get_main_queue(), { 
       self.showPins(self.initialLat, locationLong: self.initialLong) 
      }) 
self.activityIndicator.stopAnimating() 
+0

Если вы не заметили, я отредактировал свой [оригинальный ответ] (http://stackoverflow.com/a/35558780/3947107), чтобы получить дополнительную информацию. Если вам нужен более конкретный ответ, предоставьте некоторый код вашей текущей реализации. – Kymer

ответ

2

Вы должны убедиться, что вы делаете эти вещи:

1. Загрузите все аннотации сразу

компании Apple рекомендует в MKMapView Class Reference всех аннотациях (штифты) следует загрузить сразу:

При настройке интерфейса карты вы должны сразу добавить все свои объекты аннотации. В представлении карты используются данные координат в каждом объекте аннотации, чтобы определить, когда на экране должно появиться соответствующее представление аннотации. [...] Поскольку представления аннотаций необходимы только тогда, когда они отображаются на экране, класс MKMapView предоставляет механизм просмотра представлений аннотаций в очереди, которые не используются. Представления аннотаций с идентификатором повторного использования могут быть отсоединены и поставлены в очередь внутри карты, когда они перемещаются за пределы экрана. Эта функция улучшает использование памяти, сохраняя только небольшое количество представлений аннотаций в памяти сразу и путем повторного использования видов, которые у вас есть. Он также улучшает производительность прокрутки, уменьшая необходимость создания новых видов во время прокрутки карты.


2. Повторное использование Ваше отношение аннотаций

Вы должны убедиться, что вы правильно повторно использовать существующие взгляды аннотаций с использованием dequeueReusableAnnotationViewWithIdentifier в методе viewForAnnotation.


3. Выполните тяжелую нагрузку на фоновых потоков

Если вы не можете получить/загрузить аннотации сразу можно использовать Grand Central Dispatch, чтобы позволить «тяжелый» метод работать на фоне потока, так пользовательский интерфейс не блокируется. Примечание. Любые изменения в пользовательском интерфейсе внутри этого метода (в потоке bg) должны явно возникать в основном потоке пользовательского интерфейса.

Относительно фоновый, взгляните на this Stackoverflow answer:

let qualityOfServiceClass = QOS_CLASS_BACKGROUND 
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0) 
dispatch_async(backgroundQueue, { 
    print("This is run on the background queue") 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     print("This is run on the main queue, after the previous code in outer block") 
    }) 
}) 

Или же, использовать эту 'Async' библиотеку для некоторых синтаксического сахара.

+0

Спасибо за ответ. Все еще не решает мою проблему. Я вызываю func для обновления булавки, прежде чем звонить мне startActivityIndicator() ...и остановите его, как только func завершит процесс. Проблема заключается в том, что индикатор активности не появляется. – Stanislav

+0

Когда вы вызываете функцию для обновления контактов? (когда представление сначала загружается или в методе, например 'handleLocationChange'? – Kymer

+0

Я вызываю функцию, созданную вручную, через петлю через CoreData и после того, как вы найдете контакты. Из viewDidLoad, также после нажатия кнопки« Мое местоположение », получение текущих пользователей координирует и передает он должен функционировать, чтобы обновлять булавки вокруг него. – Stanislav

Смежные вопросы