2010-08-16 21 views
0

Je veux juste mettre en œuvre une petite fonction qui permet au système d'obtenir un emplacement sur MKMapView où l'utilisateur a touché. J'ai écrit un code comme suit:obtenir la latitude et la longitude d'un point dans MKMapView?

#import "UIViewTouch.h" 


@implementation UIViewTouch 
@synthesize viewTouched; 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *) event{ 
    NSLog(@"Hit Test"); 
    NSLog(@"x = %f, y = %f", point.x, point.y); 
    MKMapView *mapView = (MKMapView *) [self.subviews objectAtIndex:0]; 
    CLLocationCoordinate2D coordinate = [mapView convertPoint:point toCoordinateFromView:self]; 
    NSLog(@"Lat = %f, Lng = %f", coordinate.latitude,coordinate.longitude); 
     //MapAnnotation is a custom class and confirms to MKAnnotation. 
    MapAnnotation *annotation = [[MapAnnotation alloc] initWithCoordinate:coordinate]; 
    [mapView addAnnotation:annotation]; 
    return [super hitTest:point withEvent:event]; 
} 

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event{ 
    return [super pointInside:point withEvent:event]; 
} 

@end 

Il peut fonctionner correctement si je ne fais pas une annotation sur le MKMapView, sinon l'application va lancer une exception:

en raison de l'application Mettre fin exception uncaught 'NSInvalidArgumentException', raison: '- [TESTViewController openCallout:]: sélecteur non reconnu envoyé à l'instance 0x6b60180'

Toutes les idées?

Merci beaucoup!

Répondre

0

Votre code me semble bien. À quoi ressemble la pile d'appel au point d'exception? Avez-vous des appels au sélecteur apparemment inexistant -openCallout:?

0

Pas entièrement lié, mais vous devez implémenter le touch-handling dans touchesBegan: withEvent :. Ajouter spontanément une annotation dans hitTest: withEvent: est au mieux douteux, car il ajoutera probablement une vue à la vue de la carte ...