1

6つの円があると想像してください。私のタイマーは、最初に最初の 2 つの円を呼び出し、それらをマップ ビューに重ねます。2 秒後に他のサークルを呼び出し、マップ ビューに追加します。私の問題は、以前のオーバーレイを削除する方法です。たとえば、レーダー マップのスムーズな遷移を見たいです。

手短に言えば、以前のオーバーレイを削除し、ちらつきなしで新しいオーバーレイを追加したいと考えています! よろしくお願いします!!。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize mapView;
@synthesize timer;
@synthesize circle1,circle2,circle3,circle4,circle5,circle6;



- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    CLLocationCoordinate2D zoomLocation1;

zoomLocation1.latitude=29.830071;
zoomLocation1.longitude=-95.319099;
circle1 = [MKCircle circleWithCenterCoordinate:zoomLocation1 radius:15000];
circle1.title=@"first level";

CLLocationCoordinate2D zoomLocation2;
zoomLocation2.latitude=29.830071;
zoomLocation2.longitude=-95.319099;
circle2 = [MKCircle circleWithCenterCoordinate:zoomLocation2 radius:4000];
circle2.title=@"first level";

CLLocationCoordinate2D zoomLocation3;
zoomLocation3.latitude=29.830071;
zoomLocation3.longitude=-95.319099;
circle3 = [MKCircle circleWithCenterCoordinate:zoomLocation3 radius:6000];
circle3.title=@"second level";

CLLocationCoordinate2D zoomLocation4;
zoomLocation4.latitude=29.830071;
zoomLocation4.longitude=-95.319099;
circle4 = [MKCircle circleWithCenterCoordinate:zoomLocation4 radius:18000];
circle4.title=@"second level";

CLLocationCoordinate2D zoomLocation5;
zoomLocation5.latitude=29.830071;
zoomLocation5.longitude=-95.319099;
circle5 = [MKCircle circleWithCenterCoordinate:zoomLocation5 radius:1000];
circle5.title=@"third level";

CLLocationCoordinate2D zoomLocation6;
zoomLocation6.latitude=29.830071;
zoomLocation6.longitude=-95.319099;
circle6 = [MKCircle circleWithCenterCoordinate:zoomLocation6 radius:13000];
circle6.title=@"third level";


    MKCoordinateRegion viewRegion=MKCoordinateRegionMakeWithDistance(zoomLocation1, 60*1609, 60*1609);

MKCoordinateRegion adjustedRegion=[mapView regionThatFits:viewRegion];

[mapView setRegion:adjustedRegion animated:YES];
mapView.mapType=MKMapTypeStandard;
[mapView setDelegate:(id)self];
i=0;
}

- (void)viewDidUnload
{
[self setMapView:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:    (UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (IBAction)drawButton:(id)sender {
timer = [NSTimer scheduledTimerWithTimeInterval:(2.0) target:self     selector:@selector(addingOverlay) userInfo:nil repeats:YES];

}


- (void)addingOverlay {

i=i+1;    
switch(i%3)
{
    case 1:
        [mapView removeOverlays: [mapView overlays]];
        [mapView addOverlay:circle1];
        [mapView addOverlay:circle2];
        break;
    case 2:
        [mapView removeOverlays: [mapView overlays]];
        [mapView addOverlay:circle3];
        [mapView addOverlay:circle4];
        break;
    case 3:
        [mapView removeOverlays: [mapView overlays]];
        [mapView addOverlay:circle5];
        [mapView addOverlay:circle6];
        break;

}


}

-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay> )overlay
{
MKCircleView *circleView = [[MKCircleView alloc] initWithOverlay:overlay];
if ([overlay.title isEqualToString:@"first level"]) 
{
circleView.strokeColor = [UIColor redColor];
circleView.lineWidth = 2;
circleView.fillColor=[UIColor yellowColor];
}
else if([overlay.title isEqualToString:@"second level"])
{
circleView.strokeColor = [UIColor whiteColor];
circleView.lineWidth = 2;
circleView.fillColor=[UIColor blackColor];
}
else{
circleView.strokeColor = [UIColor greenColor];
circleView.lineWidth = 2;
circleView.fillColor=[UIColor redColor];


}

return circleView;
}




@end
4

1 に答える 1

1

この回答を同様の質問に投稿しました。

2つのdrawRangeRingsを描く( )を使用する機能があります。私の例では、両方の円の中心座標は同じですが、半径の値と色が異なります。必要に応じて、円ごとに異なる中心座標を使用するようにコードを簡単に変更できます。

基本的にdrawRangeRings、中心座標が変化したときに呼び出すと、元の 2 つの円が削除され、別の場所に 2 つの新しい円が描画されます。

これが必要なものではない場合はお知らせください。

アプリでこれを使用すると、ちらつきは見られません。

于 2012-09-23T03:52:03.047 に答える