MKCircle-Добавление / удаление оверлеев

Представь, что у меня 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

1 ответ

Решение

Я только что опубликовал этот ответ на похожий вопрос.

У него есть функция, которую я использую (drawRangeRings), который рисует два круга. В моем примере обе окружности имеют одинаковую координату центра, но разные значения радиуса и цвета. Вы можете легко изменить код, чтобы использовать разные координаты центра для каждого круга, если вам это нужно.

В основном я звоню drawRangeRings когда меняется центральная координата, удаляются два исходных круга и рисуются два новых в другом месте.

Дайте мне знать, если это не совсем то, что вам нужно.

Я не вижу мерцания, когда использую это в своем приложении.

Другие вопросы по тегам