1

私はiphoneアプリケーションを開発するためのprogramminではかなり新しいので、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:渡すことができるメソッドもあります。これにより、読みやすく理解しやすくなり、座標からマップポイントに変換する必要がなくなります。CLLocationCoordinate2DMKMapPoint

  • MKPolylineView使用するstrokeColorだけなので、fillColorfor を設定しても何もしません。

  • viewForOverlayデリゲート メソッドではoverlay、外部で宣言されrouteLineた . 複数のオーバーレイを追加する場合、これは非常に重要です。また、最初にクラスの種類を確認してoverlayから、適切なビューを作成します。

于 2012-11-30T13:18:59.137 に答える