如何创建一个callout冒泡MKAnnotationView来响应触摸




我正在尝试使一个自定义注释视图能够响应触摸,但没有成功。
感谢这个问题,我能够做一个注释视图接近我想要的自定义callout气泡为annotationview?也看过这个如何捕捉触摸而不解散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
  }
}

问题是地图视图正在吃所有的触摸事件,我的自定义callout有两个按钮,但没有动作被触发按下它们。

在我的一个实验中,我试图将callout视图添加到MKAnnotationView父视图(mapView),一切似乎都很好,而我滚动,但如果我缩放callout移动。

你必须在地图注释中添加对话框附件视图

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

解决了这个链接自定义注释和标注,另一个棘手的部分是实现在假标注上按按钮的正确方法。我管理这部分创建了一个布尔值,该值理解屏幕上注释/parentAnnotation的数量,并选择何时可以消失或不消失。只需要使CalloutAnnotation可用于选择

相关内容

  • 没有找到相关文章

最新更新