无法使用UILongTouchGestureRecognizer从MKMapView获取坐标
我正在使用iOS 6,而且我已经阅读了很多方法来完成这个任务(包括很多从堆栈溢出),但没有成功。
这是我试过的,分成“阶段”:
-
创build一个
UILongTouchGestureRecognizer
来接收MKMapView
长触摸。- 我尝试通过我的故事板添加一个
UILongTouchGestureRecognizer
,并通过Connections Inspector连接sockets,委托等。 - 我已经尝试以编程方式创build
UILongTouchGestureRecognizer
,使用mapView
作为目标进行初始化,将self
作为目标,将UILongTouchGestureRecognizer
作为目标进行初始化。
- 我尝试通过我的故事板添加一个
-
使用
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。
- 我试过了:
-
结果
- 简而言之,这就是我使用
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]; } }