0

オーバーレイメソッドを使用して線を描くのが好きなマップビューがあります。ボタンを押したときに2つの場所の緯度と経度を追加して、それらの間に線を描画しましたが、2回目に新しい座標のペアを押したときに、提供する新しい線とマップ上の新しい線以前のオーバーレイ パスは消えてしまいましたが、同じマップ上の以前のパスも必要です

これが私のコードです。

- (IBAction)refreshMapMethod:(id)sender

{


 int kk=[[NSUserDefaults standardUserDefaults]integerForKey:@"ham"];




    if (kk==1)
    {
         CLLocationCoordinate2D coordinateArray[2];
        coordinateArray[0] = CLLocationCoordinate2DMake(12.915181,+77.626055);
        coordinateArray[1] = CLLocationCoordinate2DMake(12.892156, +77.582188);
        self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:2];
        [self.myMapView setVisibleMapRect:[self.routeLine boundingMapRect]];

        [self.myMapView addOverlay:self.routeLine];
        [[NSUserDefaults standardUserDefaults]setInteger:2 forKey:@"ham" ];


    }


    if (kk==2)
    {
        CLLocationCoordinate2D coordinateArray[2];
        coordinateArray[0] = CLLocationCoordinate2DMake(12.892156,+77.426055);
        coordinateArray[1] = CLLocationCoordinate2DMake(12.892156, +77.582188);
        self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:2];
        [self.myMapView setVisibleMapRect:[self.routeLine boundingMapRect]];

        [self.myMapView addOverlay:self.routeLine];
        [[NSUserDefaults standardUserDefaults]setInteger:3 forKey:@"ham" ];


    }
    if (kk==3)
    {
        CLLocationCoordinate2D coordinateArray[2];
        coordinateArray[0] = CLLocationCoordinate2DMake(12.892156, +77.382188);
        coordinateArray[1] = CLLocationCoordinate2DMake(12.892156, +77.282188);
        self.routeLine = [MKPolyline polylineWithCoordinates:coordinateArray count:2];
        [self.myMapView setVisibleMapRect:[self.routeLine boundingMapRect]];

        [self.myMapView addOverlay:self.routeLine];
        [[NSUserDefaults standardUserDefaults]setInteger:3 forKey:@"ham" ];


    }



    CLLocationCoordinate2D zoomLocation;
    zoomLocation.latitude= 12.915181;
    zoomLocation.longitude=77.626055;

    MKCoordinateRegion viewRegion=MKCoordinateRegionMakeWithDistance(zoomLocation, 3*METERS_PER_MILE, 3*METERS_PER_MILE);

    [self.myMapView setRegion:viewRegion animated:YES];


 [[NSUserDefaults standardUserDefaults]setInteger:2 forKey:@"change" ];


}

オーバーレイ メソッドを呼び出しています ..

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay


{

    if(overlay == self.routeLine)
    {
        if(nil == self.routeLineView)
        {
          self.routeLineView = [[MKPolylineView alloc] initWithPolyline:self.routeLine];



            self.routeLineView.fillColor = [UIColor redColor];
            self.routeLineView.strokeColor = [UIColor redColor];
            self.routeLineView.lineWidth = 5;

        }

        return self.routeLineView;
    }

    return nil;
}

同じ方法または別の方法で解決策を教えてください。

あなたより 。

4

1 に答える 1

1

これは、viewForOverlay関数がビューを返すことのみを許可してself.routelineおり、そのうちの 1 つしか持っていないためです。他のすべての呼び出しviewForOverlayは nil を返すため、描画されません。あなたがする必要があるのは、すべてのオーバーレイを描画することです。

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
    MKPolylineView* routeLineView = [[MKPolylineView alloc] initWithPolyline:(MKPolyLine)overlay];
    routeLineView.fillColor = [UIColor redColor];
    routeLineView.strokeColor = [UIColor redColor];
    routeLineView.lineWidth = 5;

    return routeLineView;
}

おそらく、最初にオーバーレイが実際にポリラインであることを確認するなど、さらにいくつかのことを行う必要がありますが、これで十分です。

于 2013-03-18T19:47:18.577 に答える