我正在使用 iOS 6,并且我已经阅读了数十种方法来实现这一点(包括许多来自堆栈溢出的方法),但都没有成功。
这是我尝试过的,分为“阶段”:
创建一个
UILongTouchGestureRecognizer
以接收长按MKMapView
。- 我尝试
UILongTouchGestureRecognizer
通过我的 Storyboard 添加一个,并通过 Connections Inspector 连接插座、代表等。 - 我尝试以
UILongTouchGestureRecognizer
编程方式创建它,将其初始化mapView
为目标、self
目标和self.view
目标。
- 我尝试
使用 中的选择器方法接收触摸手势
UILongTouchGestureRecognizer
,获取CGPoint
,并将其转换为CLLocationCoordinate2D
对象。- 我试过了:
- 使用 [mapView convertPoint:(CGPoint) toCoordinateFromView:self.mapView];
- 首先使用
MKMapPoint aPoint = MKMapPointMake(aCGPoint.x, aCGPoint.y);
,然后使用MKCoordinateForMapPoint(aMapPoint)
来获取CLLocationCoordinate2D
. - 两者都直接访问 UILongPressGestureRecognizer 并使用
(UILongPressGestureRecognizer *)sender
方法调用获取 CGRect 的 x,y。
- 我试过了:
结果
- 简而言之,这就是我在使用 检查值时得到的结果,而与使用
NSLog
的方法无关。- 对于从 给出的 X,YUILongPressGestureRecognizer
,x 似乎在 200 和 420 范围内波动。Y 范围从 ~400 - 700。 - 奇怪的是,长触摸触发的纬度和经度并打印到日志, 仅在 85.051XX(纬度)和 -179.9997XX(经度)的小数点后的第 3 - 6 位小数上有所不同。
- 简而言之,这就是我在使用 检查值时得到的结果,而与使用
这是我尝试过的一些代码的示例
- (void)viewDidLoad
{
NSLog(@"View did load");
[super viewDidLoad];
UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:mapView action:@selector(handleLongPress:)];
mapView = [[MKMapView alloc] init];
}
- (IBAction)handleLongPress:(UILongPressGestureRecognizer *)sender
{
NSLog(@"CGPoint point: x - %f y - %f", point.x, point.y);
CGPoint point = [sender locationInView:self.mapView];
CLLocationCoordinate2D locCoord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView];
NSLog(@"Coords from \"locCoord\": lat - %f lng - %f", locCoord.latitude, locCoord.lon);
MKPointAnnotation *addAnnotation = [[MKPointAnnotation alloc] init];
[addAnnotation setCoordinate:
[self.mapView addAnnotation:addAnnotation];
}
希望有人可以帮助我,因为我完全被这个难住了。
重申一下,最终目标是获取用户“长按 mapView”的位置的坐标,然后(我无法工作的其他东西)在该位置放置一个图钉。