Получите координаты точки от mkmapview на iPhone

Я пытаюсь выяснить, как поместить аннотацию на карту на основе того, где пользователь затрагивает.

Я попытался разделить на подклассы MKMapView и разыскиваемый touchesBegan стрелять, но как оказалось, MKMapView не использует стандартные сенсорные методы.

Я также попытался разделить a на подклассы UIView, добавление MKMapView как ребенок и затем прислушивание к HitTest и touchesBegan. Это работает несколько. если у меня есть своя карта полный размер UIView, затем имейте что-то вроде этого

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    return map;
}

и это работает, мой touchesBegan сможет понять с помощью

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
  for (UITouch *touch in touches){
  CGPoint pt = [touch  locationInView:map];
  CLLocationCoordinate2D coord= [map convertPoint:pt toCoordinateFromView:map];
  NSLog([NSString stringWithFormat:@"x=%f y=%f - lat=%f long = %f",pt.x,pt.y,coord.latitude,coord.longitude]);
 }
}

но затем карта имеет некоторое сумасшедшее поведение как он, не прокрутит, и это не увеличит масштаб, если не дважды коснулись, но можно уменьшить масштаб. и это только работает, если я возвращаю карту как представление. Если у меня нет метода тестирования хита, карта хорошо работает, но очевидно не получает данных.

Я иду о понимании превратно координаты? Скажите мне, что существует лучший путь. Я знаю, как добавить аннотации очень хорошо, я просто не могу найти примеры добавления аннотации, где и когда пользователь касается карты.

15
задан Randika Vishman 22 July 2016 в 08:18
поделиться

1 ответ

так что я наконец нашел способ сделать это. Если я создаю вид и добавляю к нему объект карты с тем же фреймом. затем прислушайтесь к проверке попадания в этом представлении, я могу вызвать convertPoint: toCoordinateFromView: в отправленной точке касания и передать ей карту следующим образом:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    CLLocationCoordinate2D coord= [map convertPoint:point toCoordinateFromView:map];
    NSLog(@"lat  %f",coord.latitude);
    NSLog(@"long %f",coord.longitude);

    ... add annotation ...

    return [super hitTest:point withEvent:event];
}

это довольно грубо, как есть, и когда вы прокручиваете карту, он все еще постоянно вызывает Hit test, поэтому вам нужно будет справиться с этим, но это начало для получения координат GPS от касания карты.

9
ответ дан 1 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: