получите выявляемые координаты с iPhone mapkit

Я делаю приложение, используя mapkit структуру яблока. То, что я хочу сделать, должно получить долготу и широту от местоположения, которое вы нажимаете. Я получаю координаты от пользовательского текущего местоположения, используя этот код:

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

Как я заставляю тот код показывать нажатое местоположение вместо userlocation?

17
nl ja de

3 ответы

First of all, use a UIGestureRecognizer instead an 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);

}

Свифт 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)")
}

Свифт 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)")
}
53
добавлено
Быстро 4 все еще работает отлично в спасибо XCode вариантов 9.3!
добавлено автор Felipe Valdivia, источник
спасибо за то, чтобы редактировать, чтобы усовершенствовать его
добавлено автор jcesarmobile, источник
Быстрая версия все еще работает отлично в Xcode 7.3
добавлено автор James Toomey, источник
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
    }
}

Свифт 4.

class mapviewCtrl: UIViewController, UIGestureRecognizerDelegate
{
  @IBOutlet var mapViewVar: MKMapView!
  override func viewDidLoad() {
  super.viewDidLoad()
  self.setMapview()
}
func setMapview(){
  let lpgr = UILongPressGestureRecognizer(target: self, action: #selector(mapviewCtrl.handleLongPress(gestureReconizer:)))
  lpgr.minimumPressDuration = 0.5
  lpgr.delaysTouchesBegan = true
  lpgr.delegate = self
  self.mapViewVar.addGestureRecognizer(lpgr)
} 

@objc func handleLongPress(gestureReconizer: UILongPressGestureRecognizer) {
  if gestureReconizer.state != UIGestureRecognizerState.ended {
    let touchLocation = gestureReconizer.location(in: mapViewVar)
    let locationCoordinate = mapViewVar.convert(touchLocation,toCoordinateFrom: mapViewVar)
    print("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)")
    return
  }
  if gestureReconizer.state != UIGestureRecognizerState.began {
    return
  }
}
}
5
добавлено

Иначе для быстрых 3 будет этот: Это - мэшап немногих отрывков - с отверганием вас только обновляют код в одном месте, которое может быть удобным, увеличить модульность и удалить предположения и потенциальные пункты катастрофы.

  override func touchesBegan(_ touches: Set, 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)")
    }
}
2
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.