В iOS 3.2 или выше, вероятно, лучше и проще использовать UIGestureRecognizer
с видом карты вместо того, чтобы пытаться разделить его на классы и перехватывать касания вручную.
Сначала добавьте распознаватель жестов на картуview:
UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tapGestureHandler:)];
tgr.delegate = self; //also add <UIGestureRecognizerDelegate> to @interface
[mapView addGestureRecognizer:tgr];
[tgr release];
Далее, внедрите shouldRecognizeSimultaneouslyWithGestureRecognizer
и верните YES
, чтобы ваш распознаватель жестов касания мог работать одновременно с картой (в противном случае касания на булавках не будут обрабатываться картой автоматически).):
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer
:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Наконец, реализуйте обработчик жестов:
- (void)tapGestureHandler:(UITapGestureRecognizer *)tgr
{
CGPoint touchPoint = [tgr locationInView:mapView];
CLLocationCoordinate2D touchMapCoordinate
= [mapView convertPoint:touchPoint toCoordinateFromView:mapView];
NSLog(@"tapGestureHandler: touchMapCoordinate = %f,%f",
touchMapCoordinate.latitude, touchMapCoordinate.longitude);
}