2012-11-30 83 views
1

我很新的programmin開發iPhone應用程序,我想知道爲什麼MKPolyline,我創建與2 MKMapPoints不會出現在我的視圖插入MKMapView。 這裏是我的代碼:爲什麼MKPolyline不顯示在MKMapView上?

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

map = [[MKMapView alloc] initWithFrame:self.view.bounds]; 


MKMapPoint * pointsArray = malloc(sizeof(CLLocationCoordinate2D)*4); 

CLLocationCoordinate2D punto1; 
punto1.latitude =39.468502; 
punto1.longitude =-0.398469; 


MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc]init]; 
annotationPoint.coordinate = punto1; 
annotationPoint.title = @"Point 1"; 

MKPointAnnotation *annotationPoint2 = [[MKPointAnnotation alloc]init]; 
annotationPoint2.coordinate = CLLocationCoordinate2DMake(39.472312,-0.386453); 
annotationPoint2.title = @"Point 2"; 


[map addAnnotation:annotationPoint]; 
[map addAnnotation:annotationPoint2]; 


pointsArray[0]= MKMapPointForCoordinate(punto1); 

pointsArray[1]= MKMapPointForCoordinate(CLLocationCoordinate2DMake(39.467011,-0.390015)); 

pointsArray[2]= MKMapPointForCoordinate(CLLocationCoordinate2DMake(39.469926,-0.392118)); 

pointsArray[3]= MKMapPointForCoordinate(CLLocationCoordinate2DMake(39.472312,-0.386453)); 

routeLine = [MKPolyline polylineWithPoints:pointsArray count:4]; 

free(pointsArray); 

[map addOverlay:routeLine]; 

MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(39.467011,-0.392515), 1100, 1100); 
[map setRegion:region]; 

[self.view insertSubview:map atIndex:0]; 

} 

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay 

{ 

MKOverlayView* overlayView = nil; 

MKPolylineView * routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine]; 


routeLineView.fillColor = [UIColor blueColor]; 

routeLineView.strokeColor = [UIColor orangeColor]; 

routeLineView.lineWidth = 3; 

overlayView = routeLineView; 

return overlayView; 

} 

的註釋是確定,他們正確地顯示在地圖上。 希望有人能幫忙,謝謝!!!

回答

0

MKPolyline未顯示,因爲未設置地圖的delegate

viewForOverlay代表如果未設置地圖的delegate屬性,方法將不會被調用。由於委託方法不會被調用時,MKPolylineView永遠不會被創建,等等...

創建MKMapView後,設置其delegate

map = [[MKMapView alloc] initWithFrame:self.view.bounds]; 
map.delegate = self; // <-- add this 



我想提幾個其他不相關的要點:

  • 既然你把MKMapPoint值在pointsArraymalloc應該使用sizeof(MKMapPoint)而不是sizeof(CLLocationCoordinate2D)。它碰巧與錯誤的代碼一起工作,因爲兩個結構碰巧都是相同的大小。但是你仍然應該使用正確的代碼。

  • MKPolyline也有polylineWithCoordinates:count:方法,這樣你就可以通過CLLocationCoordinate2D而不是MKMapPoint結構。這可以更容易閱讀,理解並避免必須從座標轉換爲映射。

  • MKPolylineView只使用strokeColor所以設置fillColor它什麼也不做。

  • viewForOverlay委託方法中,最好使用傳入該方法的參數overlay而不是外部聲明的routeLine。如果您想添加多個疊加層,這將非常重要。您還將首先檢查overlay的類別,然後爲其創建相應的視圖。