Я создаю приложение, которое отправляет запрос на вызов для любого доступного пользователя по США и обновляет отправителя по ходу через оверлеи карт и индикатор выполнения. По какой-то причине карта и индикатор выполнения не обновляются до последнего шага, независимо от того, какие трюки я пытаюсь использовать в Grand Central Dispatch, CATransaction и т. Д. Обратите внимание, что я использую Parse для бэкэнд и завершения операций в блоке после получения объект.iOS map overlay не обновляется
dispatch_queue_t main_queue = dispatch_get_main_queue();
PFQuery *repQuery = [PFQuery queryWithClassName:@"User"];
[repQuery getObjectInBackgroundWithId:[_currentCallObject objectForKey:@"Rep"] block:^(PFObject *repUser, NSError *error) {
PFGeoPoint *repLocation = [repUser objectForKey:@"location"];
dispatch_async(main_queue, ^{
CLLocationCoordinate2D coordinates[2];
coordinates[0] = _repMapView.userLocation.coordinate;
coordinates[1] = CLLocationCoordinate2DMake(repLocation.latitude, repLocation.longitude);
MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:2];
MKCircle *circle1 = [MKCircle circleWithCenterCoordinate:coordinates[0] radius:40000];
MKCircle *circle2 = [MKCircle circleWithCenterCoordinate:coordinates[1] radius:40000];
[_repMapView addOverlay:circle1];
[_repMapView addOverlay:circle2];
[_repMapView addOverlay:route];
[_repMapView setNeedsDisplay];
[_callProgressView setProgressToStep:4];
[CATransaction flush];
});
}];
мнение о ходе работы содержится в отдельном файле .m, но накладками нарисованы в том же файле .m как таковой:
- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{
// MKCircle and MKPolyline handled here
}
Я также поставил все следующие в заголовочном файле : MKMapViewDelegate, MKAnnotation, MKOverlay Кроме того, _repMapView.delegate = self; был установлен в первоначальном чертеже вида карты.
Я пропустил что-то очевидное здесь, из-за чего пользовательский интерфейс не обновляется в режиме реального времени?
Спасибо.
Всякий раз, когда у меня была эта проблема, она всегда оказывалась чем-то невероятно простым, как плохой «IBOutlet» или «делегат». Вам не нужно 'setNeedsDisplay'. Вам не нужно «CATransaction». Можете ли вы выполнить некоторую дополнительную диагностику (например, зарегистрированный массив 'overlays'' _repMapView', когда вы все сделали, чтобы убедиться, что материал был добавлен, как вы думали, NSLog/breakpoint в 'viewForOverlay', чтобы увидеть, , посмотрите фактические значения широты/долготы). Вам нужно сужаться там, где это происходит. Если не считать ненужных вызовов, я не вижу ничего плохого в вашем коде, связанном с вашим MKMapView. – Rob