Vous pouvez utiliser un UILongPressGestureRecognizer pour cela. Chaque fois que vous créez ou initialiser le MapView, d'abord fixer le reconnaisseur à lui:
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]
initWithTarget:self action:@selector(handleLongPress:)];
lpgr.minimumPressDuration = 2.0; //user needs to press for 2 seconds
[self.mapView addGestureRecognizer:lpgr];
[lpgr release];
Puis dans le gestionnaire de geste:
- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state != UIGestureRecognizerStateBegan)
return;
CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView];
CLLocationCoordinate2D touchMapCoordinate =
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];
YourMKAnnotationClass *annot = [[YourMKAnnotationClass alloc] init];
annot.coordinate = touchMapCoordinate;
[self.mapView addAnnotation:annot];
[annot release];
}
YourMKAnnotationClass est une classe que vous définissez qui est conforme au protocole MKAnnotation. Si votre application ne fonctionne que sur iOS 4.0 ou version ultérieure, vous pouvez utiliser la classe MKPointAnnotation prédéfinie à la place. Pour des exemples sur la création de votre propre classe MKAnnotation, voir les exemples d'applications WeatherMap et MapCallouts.
Merci, il travaille –
réponse Impressionnant, merci. Personnellement, j'ai retourné l'instruction if à un '==', donc il retourne si * n'est pas * 'UIGestureRecognizerStateBegan'. Cela supprimera la broche après l'heure spécifiée, même si l'utilisateur tient toujours la carte qui était souhaitable pour moi (et comment l'application officielle Maps le fait). –
Je voudrais juste dire que j'ai implémenté votre réponse dans mon projet et que cela a fonctionné comme un charme. Merci pour votre excellente réponse. – DoubleDunk