我创建了一个注释,其中包含几个元素 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 气泡。
我在保存我的 mkmap 的 viewController 中以正确的方式使用正确的 addAnnotation 方法。同样,上面的代码在我的自定义注释中,我希望我的自定义注释负责删除它自己的元素,而不是从地图中删除它自己。