получить широту и долготу из точки в MKMapView?

Я просто хочу реализовать небольшую функцию, которая позволяет системе получать местоположение на 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

Это может работать нормально, если я не добавлю аннотацию к MKMapView, иначе приложение выдаст исключение:

Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «-[TESTViewController openCallout:]: нераспознанный селектор отправлен экземпляру 0x6b60180»

Любые идеи?

Большое спасибо!


person user422020    schedule 16.08.2010    source источник


Ответы (2)


Ваш код выглядит хорошо для меня. Как выглядит стек вызовов в точке исключения? Есть ли у вас какие-либо обращения к явно несуществующему селектору -openCallout:?

person Seamus Campbell    schedule 16.08.2010

Не совсем связано, но вы должны реализовать обработку касаний в touchesBegan:withEvent:. Самопроизвольное добавление аннотации в hitTest:withEvent: в лучшем случае сомнительно, так как это, вероятно, добавит представление к представлению карты...

person tc.    schedule 17.08.2010