我正在使用iOS 6,并且我已经阅读了很多方法来实现这一点(包括许多来自堆栈溢出)但没有成功。
这是我尝试过的,分为“阶段”:
创建UILongTouchGestureRecognizer
以接收MKMapView
的长触摸。
UILongTouchGestureRecognizer
,并通过Connections Inspector连接出口,代表等。UILongTouchGestureRecognizer
,使用mapView
作为目标进行初始化,self
作为目标,self.view
作为目标。使用UILongTouchGestureRecognizer
中的选择器方法接收触摸手势,获取CGPoint
,然后将其转换为CLLocationCoordinate2D
对象。
MKMapPoint aPoint = MKMapPointMake(aCGPoint.x, aCGPoint.y);
,然后使用MKCoordinateForMapPoint(aMapPoint)
获取CLLocationCoordinate2D
。(UILongPressGestureRecognizer *)sender
来获取CGRect的x,y。结果
NSLog
检查值时所获得的,无论使用何种方法。
- 对于从UILongPressGestureRecognizer
给出的X,Y,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“,然后(其他我无法工作的东西)在该位置放置一个别针。
答案 0 :(得分:2)
回顾我在iOS 6中运行的旧项目,我们似乎有几乎完全相同的代码(我猜的源代码教程相同)。不同之处在于我正在检查state
并且我的mapView变量未在viewDidLoad中重置。您似乎在手势识别器之后分配了一个新的,并且您没有显示任何将其添加到viewController的代码。我猜你已经设法将屏幕上的那个与代码中的那个分开了。如果您的MKMapview要在viewcontroller的生命周期中显示在屏幕上,那么让IB管理分配和分配。
- (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];
}
}