Я пытаюсь выяснить, как поместить аннотацию на карту на основе того, где пользователь затрагивает.
Я попытался разделить на подклассы 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]);
}
}
но затем карта имеет некоторое сумасшедшее поведение как он, не прокрутит, и это не увеличит масштаб, если не дважды коснулись, но можно уменьшить масштаб. и это только работает, если я возвращаю карту как представление. Если у меня нет метода тестирования хита, карта хорошо работает, но очевидно не получает данных.
Я иду о понимании превратно координаты? Скажите мне, что существует лучший путь. Я знаю, как добавить аннотации очень хорошо, я просто не могу найти примеры добавления аннотации, где и когда пользователь касается карты.
так что я наконец нашел способ сделать это. Если я создаю вид и добавляю к нему объект карты с тем же фреймом. затем прислушайтесь к проверке попадания в этом представлении, я могу вызвать 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 от касания карты.