我有一个 UITapGestureRecognizer,当用户点击地图时,它将隐藏并在我的 MKMap 上显示一个工具栏 - 很简单。
但是,当用户点击 MKMapAnnotation 时,我不希望地图以正常方式(上图)响应点击。此外,当用户点击地图上的其他位置以取消选择 MKAnnotation 标注时,我也不希望工具栏响应。因此,工具栏应仅在当前没有处于选定状态的 MKAnnotations 时响应。当用户直接单击注释时,它也不应该响应。
到目前为止,我一直在尝试对地图上的点击手势做出反应的以下操作 - 但是从未检测到注释视图(第一个 if 语句),而且无论这种方法如何,注释视图也会启动。
-(void)mapViewTapped:(UITapGestureRecognizer *)tgr
{
CGPoint p = [tgr locationInView:self.mapView];
UIView *v = [self.mapView hitTest:p withEvent:nil];
id<MKAnnotation> ann = nil;
if ([v isKindOfClass:[MKAnnotationView class]])<---- THIS CONDITION IS NEVER MET BUT ANNOTATIONS ARE SELECTED ANYWAY
{
//annotation view was tapped, select it…
ann = ((AircraftAnnotationView *)v).annotation;
[self.mapView selectAnnotation:ann animated:YES];
}
else
{
//annotation view was not tapped, deselect if some ann is selected...
if (self.mapView.selectedAnnotations.count != 0)
{
ann = [self.mapView.selectedAnnotations objectAtIndex:0];
[self.mapView deselectAnnotation:ann animated:YES];
}
// If no annotation view is selected currently then assume control of
// the navigation bar.
else{
[self showToolBar:self.navigationController.toolbar.hidden];
}
}
}
我需要以编程方式控制注释调用的启动并检测点击事件何时命中注释以实现此目的。
任何帮助,将不胜感激。