我正在尝试制作一个自定义注释视图,能够在没有成功的情况下响应触摸
感谢这个问题,我能够制作一个接近我想要的注释视图customize callout bubble for annotationview?也见过这个How to capture touches and NOT dismiss the callout?,但问题却截然不同
到目前为止,我做的第一件事是继承MKAnnotationView并覆盖-setSelected:animated:method
- (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),当我滚动时,一切似乎都很好,但如果我缩放标注移动。
答案 0 :(得分: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
{
}
答案 1 :(得分:0)
解决了这个链接Custom annotation and callouts,另一个棘手的部分是实现一个正确的方法按下假的标注上的按钮。我管理这个部分创建一个布尔值,它理解屏幕上的注释/ parentAnnotation的数量,并选择何时可以消失。只需要使CalloutAnnotation可供选择。