1
我正在創建一個應用程序,它可以爲美國各地的任何可用用戶發送呼叫請求,並在此期間通過地圖疊加和進度條更新進度調用發件人。出於某種原因,無論我嘗試使用Grand Central Dispatch,CATransaction等嘗試什麼技巧,地圖和進度條都不會更新到最後一步。請注意,我在使用Parse作爲後端並在獲得後在塊中完成操作目的。iOS地圖覆蓋不更新
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無法實時更新嗎?
謝謝。
每當我遇到這個問題時,它總是變得非常簡單,就像一個糟糕的'IBOutlet'或'委託'一樣。你不需要'setNeedsDisplay'。你不需要'CATransaction'。你可以做一些add'l診斷(例如,當你完成所有工作以確保東西已經按照你的想法添加時,記錄'_repMapView'的'overlays'數組;'viewForOverlay'中的NSLog /斷點,看看它是否被調用;查看實際的緯度/經度值)。你需要縮小它出錯的地方。在一些不必要的調用之後,我發現你的'MKMapView'相關代碼沒有問題。 – Rob 2013-02-25 18:50:15