我正在创建一个应用程序,它为美国各地的任何可用用户发送呼叫请求,同时通过地图覆盖和进度条更新呼叫发送者的进度。出于某种原因,无论我尝试使用 Grand Central Dispatch、CATransaction 等什么技巧,地图和进度条都不会更新到最后一步。请注意,我使用 Parse 作为后端,并在获得目的。
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; 在地图视图的初始绘图中设置。
我是否遗漏了一些明显的东西导致 UI 无法实时更新?
谢谢。