1

我对开发 iphone 应用程序的程序非常陌生,我想知道为什么我用 2 个 MKMapPoints 创建的 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;

}

注释没问题,它们在地图上正确显示。希望有人能帮忙,谢谢!!!

4

1 回答 1

0

MKPolyline显示,因为delegate未设置地图。

如果未设置地图的属性,则不会调用viewForOverlay 委托方法。delegate因为委托方法永远不会被调用,MKPolylineView永远不会被创建,等等......

创建 后MKMapView,设置其delegate

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



我想提一些其他不相关的点:

  • 由于您将MKMapPoint值放入 中pointsArray,因此malloc应该使用sizeof(MKMapPoint)而不是sizeof(CLLocationCoordinate2D). 它碰巧使用错误的代码,因为两个结构碰巧是相同的大小。但是您仍然应该使用正确的代码。

  • MKPolyline也有一个polylineWithCoordinates:count:方法,所以你可以通过CLLocationCoordinate2D而不是MKMapPoint结构。这可以更容易阅读、理解,并避免必须从坐标转换为地图点。

  • MKPolylineView仅用于strokeColor设置fillColorfor 它什么都不做。

  • 在委托方法中,使用传递给方法的参数而不是外部声明的参数viewForOverlay会更好。如果您想添加多个叠加层,这将非常重要。您还将首先检查类是什么类型,然后为它创建适当的视图。overlayrouteLineoverlay

于 2012-11-30T13:18:59.137 回答