Управление многими метками в MapKit
В моем приложении мне нужно нарисовать много меток и постоянно обновлять их местоположение (или удалять их, если они стареют). Сейчас я делаю это с некоторыми каскадными и последовательными циклами, и я боюсь, что это не самый эффективный способ сделать это. Вот как я делаю эту работу до сих пор:
- Для каждой метки, которую нужно нарисовать, я сначала ищу в массиве аннотаций MapKit (созданный пользовательским MKPlacemark, где я добавил дату создания и уникальный идентификатор) уникальный идентификатор метки, которую нужно нарисовать. Если я нахожу метку, я обновляю только ее местоположение, в противном случае я добавляю новую аннотацию на карту.
- Для каждой метки в массиве аннотаций MapKit я проверяю, превышает ли истекшее время между текущей датой и датой создания больше 10 секунд, и если это правда, я удаляю эту аннотацию с карты.
Я повторяю эти 2 цикла каждые 2 секунды.
Проблема в том, что когда я управляю 20 метками или более, циклы занимают слишком много времени, а процесс обновления-удаления не работает должным образом.
Какой самый быстрый метод для работы с массивом аннотаций? Это быстрее, удаляя каждую аннотацию и перерисовывая их всех?
1 ответ
Я решил проблему. Я делал это правильно. Единственной оставшейся проблемой было зависание экрана во время обновления карты. По этой причине я решил запустить процесс обновления / удаления в другом потоке. Это означает, что когда вы готовы обновить метку или удалить ее, фоновый поток должен вызвать обновление карты в главном потоке (карта должна быть обновлена в основном потоке).