Un modo è quello di implementare il metodo UIGestureRecognizerDelegate
gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:
e tornare YES
in esso:
//add <UIGestureRecognizerDelegate> to .h to avoid compiler warning
//add this where you create tapGestureRecognizer...
tapGestureRecognizer.delegate = self;
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Ora il vostro mapViewTapped:
verrà chiamato e poi riconoscitore del guarda la mappa sarà chiamare il suo metodo. Se il tocco era su una vista annotazione, la vista mappa mostrerà il suo callout (e il metodo delegato didSelectAnnotationView
verrà chiamato se lo hai implementato).
Un altro modo, se avete bisogno di un maggiore controllo, quindi invece di fare quanto sopra, nel vostro mapViewTapped:
è possibile controllare se il rubinetto era su una vista annotazione e quindi selezionare manualmente l'annotazione che sarà poi mostrare la sua didascalia (e chiamare il metodo didSelectAnnotationView
delegato):
-(void)mapViewTapped:(UITapGestureRecognizer *)tgr
{
CGPoint p = [tgr locationInView:mapView];
UIView *v = [mapView hitTest:p withEvent:nil];
id<MKAnnotation> ann = nil;
if ([v isKindOfClass:[MKAnnotationView class]])
{
//annotation view was tapped, select it...
ann = ((MKAnnotationView *)v).annotation;
[mapView selectAnnotation:ann animated:YES];
}
else
{
//annotation view was not tapped, deselect if some ann is selected...
if (mapView.selectedAnnotations.count != 0)
{
ann = [mapView.selectedAnnotations objectAtIndex:0];
[mapView deselectAnnotation:ann animated:YES];
}
}
}
grazie, la tua spiegazione è non solo utile, ma molto dettagliate – MegaManX
Molte grazie, il tuo secondo suggerimento era esattamente quello che cercavo! – MrDB
Ottimo suggerimento, era quello che stavo cercando –