textbubble 및 pin 요소가 여러 개있는 주석을 만듭니다. 내가 어노테이션을 보여줄 때 나는 버블을 켠다. 그러나 나중에 버블을 끄고 어노테이션을 남기고 싶다.mkmap에 주석을 추가하고 있지만 주석의 일부를 제거하려고하지만 제거하지는 않겠습니다.
다음은 두 가지 방법입니다. add 하위 뷰는 작동하지만 하위 뷰는 제거하지 않습니다.
-(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;
}
는 // UPDATE는 /////
는 약간의 혼동이있는 것 같습니다. 위의 코드는 내 mkmap을 보유하고있는 viewController가 아니라 사용자 정의 주석 내부의 코드입니다. 또한 선택 또는 선택 취소를 기반으로 전체 주석을 숨기거나 표시하고 싶지 않습니다. self.etaView는 주석의 일부인 사용자 정의보기입니다. 내 특수 효과는 맞춤지도 핀과 ÉT 거품으로 구성됩니다. ETA가 0으로 계산되면 버블 (일명 self.etaView)을 삭제하려고하지만 주석 (지도 핀)은 전체 시간 동안지도에 있어야합니다. ETA 버블을 숨기고 싶습니다.
내 mkmap을 보유하고있는 내 viewController에서 적절한 addAnnotation 메서드를 사용하고 있습니다. 다시 위의 코드는 내 사용자 정의 주석 안에 있으며 사용자 정의 주석에 자체 요소를 제거하고 맵에서 자체를 제거하지 않아야합니다.
예, 여기서 직접보기 계층 구조를 혼란스럽게하지 마십시오. 제공된 프레임 워크 메소드 –
을 사용하여 주석을 추가/제거 addAnotation/removeAnnotation –
정착하십시오. 위의 코드는지도를 관리하는 내 컨트롤러에 없습니다. 이것은 내 주석의 코드입니다. 따라서 - (id) initWithAnnotation : (id) 주석 reuseIdentifier : (NSString *) reuseIdentifier 클래스를 실행하는 뷰 컨트롤러에서 viewForAnnotation 메서드를 사용하고 있습니다. 또한 주석의 하위 뷰를 제거하려는 경우 deselectAnnotation이라고 가정하지 마십시오. 한 번 표시된 주석을 제거하고 싶지 않습니다. 나 또한 화면을 터치하지 않고 코드를 통해 self.etaView를 숨기고 표시합니다. 그리고 self.etaView는 전체 주석이 아니라 하나의 뷰 요소입니다. –
jdog