我正在尝试使一个自定义注释视图能够响应触摸,但没有成功。
感谢这个问题,我能够做一个注释视图接近我想要的自定义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可用于选择