无法使用UILongTouchGestureRecognizer从MKMapView获取坐标

我正在使用iOS 6,而且我已经阅读了很多方法来完成这个任务(包括很多从堆栈溢出),但没有成功。

这是我试过的,分成“阶段”:

  1. 创build一个UILongTouchGestureRecognizer来接收MKMapView长触摸。

    • 我尝试通过我的故事板添加一个UILongTouchGestureRecognizer ,并通过Connections Inspector连接sockets,委托等。
    • 我已经尝试以编程方式创buildUILongTouchGestureRecognizer ,使用mapView作为目标进行初始化,将self作为目标,将UILongTouchGestureRecognizer作为目标进行初始化。
  2. 使用UILongTouchGestureRecognizer的select器方法接收触摸手势,获取CGPoint并将其转换为CLLocationCoordinate2D对象。

    • 我试过了:
      • 使用[mapView convertPoint:(CGPoint)toCoordinateFromView:self.mapView];
      • 使用MKMapPoint aPoint = MKMapPointMake(aCGPoint.x, aCGPoint.y); 首先,然后使用MKCoordinateForMapPoint(aMapPoint)来获取CLLocationCoordinate2D
      • 直接访问UILongPressGestureRecognizer并使用方法调用中的(UILongPressGestureRecognizer *)sender来获取CGRect的x,y。
  3. 结果

    • 简而言之,这就是我使用NSLog检查值时所得到的结果,不pipe使用什么方法。 – 对于UILongPressGestureRecognizer给出的X,Y,x似乎在200和420的范围内波动UILongPressGestureRecognizer的范围在UILongPressGestureRecognizer – 700之间。 – 经过长时间触摸并印在日志上的纬度和经度,奇怪的是,只有在小数点85.051XX(纬度)和-179.9997XX(经度)之后的第三个 – 第六个十进制值之间变化。

这里是我尝试过的一些代码的例子

 - (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 - %fy - %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]; } 

希望有人能帮助我,因为我完全沉迷于这一个。

只是重申一下,最终目标是获得用户“长按地图视图”的坐标,然后(其他我无法工作的东西)在该位置放下一个别针。

回顾一下我在iOS 6中工作的一个旧项目,我们似乎有几乎相同的代码(我猜想是相同的源代码教程)。 区别在于我正在检查state ,并且我的mapViewvariables没有在viewDidLoad中重置。 你似乎是在手势识别器之后分配一个新的,你还没有显示任何代码将其添加到您的viewController。 我猜你已经设法从屏幕上的代码和代码中分离出来。 如果你的MKMapview是通过viewcontroller的生命在屏幕上,让IBpipe理分配和分配。

 - (IBAction)handleLongPress:(UILongPressGestureRecognizer *)recognizer { if (recognizer.state == UIGestureRecognizerStateBegan) { CGPoint point = [recognizer locationInView:mapView]; CLLocationCoordinate2D locCoord = [self.mapView convertPoint:point toCoordinateFromView:self.mapView]; [self addPinAtLocation:locCoord]; } }