Ios MKCircle添加/删除覆盖层

Ios MKCircle添加/删除覆盖层,ios,mkoverlay,Ios,Mkoverlay,假设我有6个圆圈。我的计时器在开始时调用前两个圆圈,并将它们覆盖在地图视图上。然后在2秒钟后,它调用其他圆并将它们添加到地图视图中。我的问题是如何删除以前的覆盖。我想看到平滑过渡,例如雷达地图 简而言之,它希望删除以前的覆盖,并添加新的覆盖而不闪烁!提前多谢 #import "ViewController.h" @interface ViewController () @end @implementation ViewController @synthesize mapView; @syn

假设我有6个圆圈。我的计时器在开始时调用前两个圆圈,并将它们覆盖在地图视图上。然后在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
#导入“ViewController.h”
@界面视图控制器()
@结束
@实现视图控制器
@综合地图视图;
@综合定时器;
@合成circle1,circle2,circle3,circle4,circle5,circle6;
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
CLLocationCoordination2D动物位置1;
动物位置1.纬度=29.830071;
zoomLocation1.经度=-95.319099;
圆圈1=[MKCircle circleWith center坐标:zoomLocation1半径:15000];
圆圈1.标题=@“第一级”;
CLLocationCoordination2D动物位置2;
动物位置2.纬度=29.830071;
动物位置2.经度=-95.319099;
圆圈2=[MKCircle circleWith center坐标:zoomLocation2半径:4000];
圆圈2.标题=@“第一级”;
CLLocationCoordination2D动物位置3;
动物位置3.纬度=29.830071;
动物位置3.经度=-95.319099;
圆圈3=[MKCircle circleWith center坐标:zoomLocation3半径:6000];
圆圈3.标题=@“第二级”;
CLLocationCoordination2D动物位置4;
动物位置4.纬度=29.830071;
动物位置4.经度=-95.319099;
圆圈4=[MKCircle circleWith center坐标:zoomLocation4半径:18000];
圆圈4.标题=@“第二级”;
CLLocationCoordination2D动物位置5;
动物位置5.纬度=29.830071;
动物位置5.经度=-95.319099;
圆圈5=[MKCircle circleWith center坐标:zoomLocation5半径:1000];
圆圈5.标题=@“第三级”;
CLLocationCoordination2D动物位置6;
动物位置6.纬度=29.830071;
动物位置6.经度=-95.319099;
圆圈6=[MKCircle circleWith center坐标:zoomLocation6半径:13000];
圆圈6.标题=@“第三级”;
MKCoordinateRegion viewRegion=MKCoordinateRegionMakeWithDistance(缩放位置1,60*1609,60*1609);
MKCoordinateRegion adjustedRegion=[mapView RegionAtfits:viewRegion];
[地图视图设置区域:调整区域动画:是];
mapView.mapType=MKMapTypeStandard;
[mapView setDelegate:(id)self];
i=0;
}
-(无效)视图卸载
{
[自设置映射视图:无];
[超级视频下载];
//释放主视图的所有保留子视图。
}
-(布尔)应自动旋转指针面定向:(UIInterfaceOrientation)interfaceOrientation
{
返回(interfaceOrientation!=UIInterfaceOrientation肖像向上向下);
}
-(iAction)drawButton:(id)发送方{
计时器=[NSTimer scheduledTimerWithTimeInterval:(2.0)目标:自选择器:@selector(addingOverlay)用户信息:无重复:是];
}
-(无效)添加覆盖层{
i=i+1;
交换机(i%3)
{
案例1:
[mapView removeOverlays:[mapView overlays]];
[mapView addOverlay:circle1];
[mapView addOverlay:circle2];
打破
案例2:
[mapView removeOverlays:[mapView overlays]];
[mapView addOverlay:circle3];
[mapView addOverlay:circle4];
打破
案例3:
[mapView removeOverlays:[mapView overlays]];
[mapView addOverlay:circle5];
[mapView addOverlay:circle6];
打破
}
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
MKCircleView*circleView=[[MKCircleView alloc]initWithOverlay:overlay];
如果([overlay.title isEqualToString:@“第一级”])
{
circleView.strokeColor=[UIColor redColor];
circleView.lineWidth=2;
circleView.fillColor=[UIColor yellowColor];
}
else if([overlay.title isEqualToString:@“第二级”])
{
circleView.strokeColor=[UIColor whiteColor];
circleView.lineWidth=2;
circleView.fillColor=[UIColor blackColor];
}
否则{
circleView.strokeColor=[UIColor greenColor];
circleView.lineWidth=2;
circleView.fillColor=[UIColor redColor];
}
返回回路视图;
}
@结束
我只是

它有一个我使用的函数(
drawRangeRings
),可以画两个圆。在我的示例中,两个圆的中心坐标相同,但半径值和颜色不同。如果需要,可以很容易地更改代码,为每个圆使用不同的中心坐标

基本上,当中心坐标发生变化时,我调用
drawRangeRings
,它删除原来的两个圆,并在不同的位置绘制两个新的圆

如果这不是你需要的,请告诉我

当我在我的应用程序中使用它时,我没有看到任何闪烁。

我只是

它有一个我使用的函数(
drawRangeRings
),可以画两个圆。在我的示例中,两个圆的中心坐标相同,但半径值和颜色不同。如果需要,可以很容易地更改代码,为每个圆使用不同的中心坐标

基本上,当中心坐标发生变化时,我调用
drawRangeRings
,它删除原来的两个圆,并在不同的位置绘制两个新的圆

如果这不是你需要的,请告诉我


在我的应用程序中使用此选项时,我看不到任何闪烁。

您希望原始圆圈消失,然后新圆圈出现,还是希望原始圆圈移动到新位置?您好,Nate。我想让原来的圆圈消失,画出新的圆圈。但是没有闪烁!!您是希望原始圆消失,然后新圆出现,还是希望原始圆移动到新位置?您好,Nate。我想让原来的圆圈消失,画出新的圆圈。但是没有闪烁!!你好,内特。谢谢你的回复。但是,这是静态的,仅当您调用一次时才有效,。如果您使用计时器多次调用您的方法,它将闪烁。这就是exac