向mkmap添加注释,但想要删除部分注释但不会删除

时间:2013-07-06 22:49:26

标签: ios objective-c mkmapview mkannotation

我创建了一个注释,其中包含几个元素textbubble和pin。我在显示注释时打开气泡,但后来我想关闭气泡并留下注释。

这是我的两种方法。添加子视图有效,但删除子视图不起作用。

-(void)hideETACountdown {
self.etaView.hidden = YES;
[self.etaView removeFromSuperview];
}

-(void)showETACountdown {

self.etaView = [[UIView alloc] initWithFrame:CGRectMake(-34, -97, 89, 59)];
UIImageView *bg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WaitBubble_backgroundandshadow.png"]];
[self.etaView addSubview:bg];
UILabel *minLabel = [[UILabel alloc] initWithFrame:CGRectMake(7, 24, 42, 21)];
minLabel.text = @"min";
minLabel.textAlignment = UITextAlignmentCenter;
minLabel.font = [UIFont systemFontOfSize:10];

self.etaLabel = [[UILabel alloc] initWithFrame:CGRectMake(13, 4, 30, 27)];
self.etaLabel.font = [UIFont boldSystemFontOfSize:22];
self.etaLabel.textAlignment = UITextAlignmentCenter;
self.etaLabel.text = @"";

[self.etaView addSubview:minLabel];
[self.etaView addSubview:self.etaLabel];

[self addSubview:self.etaView];

self.etaView.hidden = NO;
}

- (id) initWithAnnotation:(id <MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]) {


    self.canShowCallout = YES;
    self.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    self.innerImage = [[UIImageView alloc] initWithImage:nil];
    self.innerImage.frame = CGRectMake(-15, -38, 32, 39);

    [self addSubview:self.innerImage];

    if(self.showETA) {

        [NSNotificationCenter addUniqueObserver:self
                                       selector:@selector(handleEtaTimeUpdate:)
                                           name:kEtaUpdate
                                         object:nil];
        [self showETACountdown];

    }

}
return self;
}

//更新/////

似乎有些混乱。上面的代码不在包含我的mkmap的viewController中,而是在我的自定义注释中的代码中。此外,我不想隐藏或显示基于选择或取消选择的整个注释。 self.etaView是自定义视图,它只是注释的一部分。我的注释包括一个自定义地图引脚和一个eta气泡。一旦ETA倒计数到0,我想删除气泡(又名self.etaView),但是注释(地图引脚)需要在整个时间内留在地图上。我只想隐藏ETA泡沫。

我正在使用正确的addAnnotation方法,在我的viewController中保存我的mkmap。同样,上面的代码在我的自定义注释中,我希望我的自定义注释负责删除自己的元素,而不是从地图中删除自己。

2 个答案:

答案 0 :(得分:2)

来吧,为什么要使用这个奇怪的逻辑与addSubView和removeFromSuperView。 MKMapView用于支持引脚的“数据源”。我不知道你试图实现什么样的观点,但这CGRectMake(-34, -97, 89, 59)看起来很糟糕。所以,请使用方法:

-(MKAnnotationView *)mapView:(MKMapView *)aMapView viewForAnnotation:(id<MKAnnotation>)annotation

这样,使用方法

管理注释就没有任何困难
- (void)deselectAnnotation:(id < MKAnnotation >)annotation animated:(BOOL)animated

例如:

[mapView deselectAnnotation:[mapView.selectedAnnotations objectAtIndex:0] animated:YES];

答案 1 :(得分:0)

删除气泡的方法被调用,但它没有被删除?所以我所做的是在我的注释上创建通知监听器,并在我想要删除它时发布通知并将其删除。不知道为什么它不仅仅通过调用实例方法来工作?

无论如何,通知解决了它。需要继续前进,以便启动应用程序。