将UIButton添加到MKAnnotationView

我有一个MKAnnotationView的自定义类,我试图以循环的方式添加8button的注释。我添加了button。他们在视图中的位置是完全正确的,但button的动作不为什么这个动作没有被调用,什么是解决scheme。

 -(void)setSelected:(BOOL)selected animated:(BOOL)animated` { [super setSelected:selected animated:animated]; if(selected) { UIView *circularView = [[UIView alloc]initWithFrame:CGRectMake(-55, -55, 110, 110)]; circularView.tag = 1000; UIButton *btn1; UIButton *btn2; UIButton *btn3; UIButton *btn4; UIButton *btn5; UIButton *btn6; UIButton *btn7; btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn1]; btn1.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(buttonTapped:)]; tap.numberOfTapsRequired = 1; [btn1 addGestureRecognizer:tap]; btn2 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn2]; btn3 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn3]; btn4 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn4]; btn5 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn5]; btn6 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn6]; btn7 = [UIButton buttonWithType:UIButtonTypeCustom]; [circularView addSubview:btn7]; [btn1 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; [btn2 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; [btn3 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; [btn4 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; [btn5 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; [btn6 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; [btn7 setBackgroundImage:[UIImage imageNamed:@"message-icon"] forState:UIControlStateNormal]; CGPoint point = CGPointMake(55, 55); btn1.frame = CGRectMake(point.x - 15.00, point.y - 55.00, 30, 30); btn2.frame = CGRectMake(point.x + 16.27, point.y - 39.94, 30, 30); btn3.frame = CGRectMake(point.x + 24.00, point.y - 06.10, 30, 30); btn4.frame = CGRectMake(point.x + 02.36, point.y + 21.04, 30, 30); btn5.frame = CGRectMake(point.x - 32.36, point.y + 21.04, 30, 30); btn6.frame = CGRectMake(point.x - 54.00, point.y - 06.10, 30, 30); btn7.frame = CGRectMake(point.x - 46.27, point.y - 39.94, 30, 30); [self addSubview:circularView]; } else { [[self viewWithTag:1000] removeFromSuperview]; } } -(void)buttonTapped:(UITapGestureRecognizer*)sender { } 

只要尝试添加像下面的UIButton并用UITapGestureRecognizer调用它的事件。请参阅示例波纹pipe…

 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation { MKAnnotationView *annView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier: @"pin"]; if (annView == nil) { annView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"] autorelease]; annView.frame = CGRectMake(0, 0, 200, 50); UIButton *pinButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; pinButton.frame = CGRectMake(0, 0, 140, 28); pinButton.tag = 10; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(btnPinTap:)]; tap.numberOfTapsRequired = 1; [pinButton addGestureRecognizer:tap]; [tap release]; [annView addSubview:pinButton]; } annView.annotation = annotation; UIButton *pb = (UIButton *)[annView viewWithTag:10]; [pb setTitle:annotation.title forState:UIControlStateNormal]; return annView; } - (void) btnPinTap:(UITapGestureRecognizer *)gestureRecognizer { UIButton *btn = (UIButton *) gestureRecognizer.view; MKAnnotationView *av = (MKAnnotationView *)[btn superview]; id<MKAnnotation> ann = av.annotation; NSLog(@"btnPinTap: ann.title=%@", ann.title); } 

只需在.h文件中添加委托

UIGestureRecognizerDelegate

并把这个波纹pipe方法放在你的.m文件中

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer :(UIGestureRecognizer *)otherGestureRecognizer { return YES; } 

我希望这对你有帮助…

我找不到任何解决scheme。因此,我认为这是不可能的这个方法。如果仍然有人想要实现这个function,那么必须使用绘制它们的用户交互被禁用的UIiew。添加此UIView在MKMapView。 使用方法didSelectAnnotationView [mapView deselectAnnotation:view.annotation animated:YES]; 如果需要的话。

这是因为circularView在注释框之外。 将self.frame扩展到circularView的大小将使其工作。 但是,根据其他的东西,别针等,它可能看起来不太好。