3


我正在尝试使自定义注释视图能够在没有成功的情况下响应触摸。
由于这个问题,我能够制作一个接近我想要为注释视图自定义标注气泡的注释视图?还看到了这个如何捕捉触摸而不关闭标注?但问题完全不同到目前为止我所做的第一件事是继承一个 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
  }
}

问题是地图视图正在吃掉所有的触摸事件,我的自定义标注有两个按钮,但按下它们时不会触发任何操作。

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

4

2 回答 2

4

您必须在地图注释中添加调出附件视图

-(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   
{

}
于 2011-12-22T08:21:51.260 回答
0

解决了这个链接Custom annotation and callouts,另一个棘手的部分是实现一个正确的方法来按下假标注上的按钮。我管理这部分创建了一个布尔值,该值了解屏幕上注释/父注释的数量,并选择何时可以消失。只需使 CalloutAnnotation 可供选择。

于 2012-01-03T10:23:12.920 回答