我正在尝试使自定义注释 View 能够响应触摸而没有成功。
由于这个问题,我能够制作一个接近我想要的注释 View customize callout bubble for annotationview? 也看到了这个 How to capture touches and NOT dismiss the callout? 但问题是完全不同的
到目前为止,我所做的第一件事是子类化 MKAnnotationView 并覆盖 -setSelected:animated: 方法

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
  if(selected)
  {
    MyCallOut * callOut=[MyCallOut createMyCallOut];
    callOut.tag=555;
    [self.superview addSubview:callOut];

  }
  else
  {
    // [[self viewWithTag:555] removeFromSuperview];
    //Remove my custom CallOut
  }
}

问题是 map View 正在吃掉所有的触摸事件,我的自定义标注有两个按钮,但按下它们没有触发任何 Action 。

在我的一项实验中,我尝试将标注 View 添加到 MKAnnotationView super View (mapView),当我滚动时一切似乎都很好,但是如果我缩放标注会四处移动。

最佳答案

您必须在 map 注释中添加标注附件 View

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil;
if(annotation != mapView.userLocation)
{
    static NSString *defaultPinID = @"com.invasivecode.pin";
    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
    pinView.pinColor = MKPinAnnotationColorRed;
    pinView.canShowCallout = YES;
    pinView.animatesDrop = YES;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return pinView;



}
else {
    [mapView.userLocation setTitle:@"I am here"];
}
return pinView;
}

以及您的调用的点击事件
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{

}

关于iphone - 如何创建响应触摸的标注气泡 MKAnnotationView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8601083/

10-12 02:20