Как добавить аннотации в MKMapView асинхронно?

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

// in viewdidLoad for (NSManagedObject *object in requestResults) { CustomAnnotation *customAnnotation = [[CustomAnnotation alloc] init]; customAnnotation.title = object.title; customAnnotation.coordinate = CLLocationCoordinate2DMake([object.latitude doubleValue], [object.longitude doubleValue]); [_mapView addAnnotation:customAnnotation]; } } // end viewdidload - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { // shows the annotation with a custom image MKPinAnnotationView *customPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"mapAnnotation"]; CustomAnnotation *customAnnotation = (id) annotation; customPinView.image = [UIImage imageNamed:@"green"]; return customPinView; } 

  • DrawMapRect вызывается несколько раз на пользовательском MKOverlayView
  • Создание MKMapSnapshotter с помощью MKPolylineRenderer
  • Преобразование MKCoordinateRegion в MKMapRect
  • Как рисовать линию дуги / кривой с помощью MKOverlayView на MKMapView
  • Черное и белое наложение для MKMapView
  • Индекс аннотации MapViewPath?
  • Игнорировать mapView: didSelectAnnotationView при длительном нажатии
  • Добавление / удаление MKCircle изменчиво / медленно, пытаясь имитировать изменение размера
  • 2 Solutions collect form web for “Как добавить аннотации в MKMapView асинхронно?”

    Вы можете использовать Grand Central Dispatch – GCD для этого.

    Попробуйте:

     - (void)viewDidLoad { dispatch_async(dispatch_get_global_queue(0, 0), ^{ for (NSManagedObject *object in requestResults) { CustomAnnotation *customAnnotation = [[CustomAnnotation alloc] init]; customAnnotation.title = object.title; customAnnotation.coordinate = CLLocationCoordinate2DMake([object.latitude doubleValue], [object.longitude doubleValue]); dispatch_async(dispatch_get_main_queue(), ^{ [_mapView addAnnotation:customAnnotation]; }); } }); } 

    Это хороший учебник: GCD и threading

    Еще лучше и проще, проверьте -[MKMapView addAnnotations:] для массового добавления без затрат на пересчет каждой отдельной аннотации.

    Interesting Posts

    Должен ли я всегда проверять, что init …] возвращает nil?

    Контрольная петля навигации

    UITesting Failure получает список активных приложений

    iOS Скрытие и скрытие строки состояния Не смещение подсмотра

    Включение / исключение ресурсов в зависимости от схемы

    Какой размер шрифта является заголовком в UIButton по умолчанию?

    Ветвь связи не открывает установленное приложение, кликнув по ссылке, общей для Skype

    SpriteKit – Нужно ли вам выполнять управление памятью? (Удаление узлов после сцены больше не требуется и т. Д.)

    Apple mach–Linker Error

    Как оживить скремблирование букв на своем месте в Swift?

    iOS анимирует представление, включая subviews

    Не удалось загрузить прикрепленный примечание с помощью Evernote IOS SDK

    Является ли активный контракт на оплату заявок, необходимый для тестирования в App Purchase?

    Контроллер ландшафтного представления, представленный с помощью диспетчера портрета, иногда появляется в портретной ориентации с ландшафтными границами

    reloadData VS. reloadRowsAtIndexPaths

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.