用iphone mapkit获取tapped坐标

我正在使用苹果的mapkit框架来制作应用程序。 我想要做的是从你按下的位置获取经度和纬度。 我使用这个代码从用户当前位置得到坐标:

- (IBAction)longpressToGetLocation:(id)sender { CLLocationCoordinate2D location = [[[self.mapView userLocation] location] coordinate]; NSLog(@"Location found from Map: %f %f",location.latitude,location.longitude); } 

我如何获得该代码显示按下的位置,而不是userlocation?

首先,使用UIGestureRecognizer而不是IBAction

 - (void)longpressToGetLocation:(UIGestureRecognizer *)gestureRecognizer { if (gestureRecognizer.state != UIGestureRecognizerStateBegan) return; CGPoint touchPoint = [gestureRecognizer locationInView:self.mapView]; CLLocationCoordinate2D location = [self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView]; NSLog(@"Location found from Map: %f %f",location.latitude,location.longitude); } 

Swift 2:

 @IBAction func revealRegionDetailsWithLongPressOnMap(sender: UILongPressGestureRecognizer) { if sender.state != UIGestureRecognizerState.Began { return } let touchLocation = sender.locationInView(protectedMapView) let locationCoordinate = protectedMapView.convertPoint(touchLocation, toCoordinateFromView: protectedMapView) print("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)") } 

Swift 3:

 @IBAction func revealRegionDetailsWithLongPressOnMap(sender: UILongPressGestureRecognizer) { if sender.state != UIGestureRecognizerState.began { return } let touchLocation = sender.location(in: protectedMapView) let locationCoordinate = protectedMapView.convert(touchLocation, toCoordinateFrom: protectedMapView) print("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)") } 
 class mapviewCtrl: UIViewController, UIGestureRecognizerDelegate { @IBOutlet var mapViewVar: MKMapView! override func viewDidLoad() { super.viewDidLoad() let lpgr = UILongPressGestureRecognizer(target: self, action:"handleLongPress:") lpgr.minimumPressDuration = 0.5 lpgr.delaysTouchesBegan = true lpgr.delegate = self self.mapViewVar.addGestureRecognizer(lpgr) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) { if gestureReconizer.state != UIGestureRecognizerState.Ended { let touchLocation = gestureReconizer.locationInView(mapViewVar) let locationCoordinate = mapViewVar.convertPoint(touchLocation,toCoordinateFromView: mapViewVar) println("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)") return } if gestureReconizer.state != UIGestureRecognizerState.Began { return } 

swift 3的另一个方法是这样的:这是一个很less的代码片段的混搭,你只需要在一个可以方便的地方更新代码,增强模块性,并消除假设和潜在的崩溃点。

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { // Let's put in a log statement to see the order of events print(#function) for touch in touches { let touchPoint = touch.location(in: self.mapView) let location = self.mapView.convert(touchPoint, toCoordinateFrom: self.mapView) print ("\(location.latitude), \(location.longitude)") } }