2016-12-02 5 views
1

У меня есть приложение iOS, где мне нужно вмешиваться в карту. После некоторого поиска я пришел к выводу, что мне нужно использовать объект MKMapView и, возможно, реализовать протокол MKMapViewDelegate.Обращение с кранами на карте

Теперь я задаюсь вопросом, как я могу захватить точку касания (означая долготу и рельефность), когда пользователь нажимает на карту. Я полагаю, что есть намного лучший способ, чем заняться домашним хозяйством UITapGestureRecognizer.

Чтобы сделать это ясно и просто, у меня есть такой код, чтобы начать с:

import UIKit 
import CoreLocation 
import MapKit 

class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate { 
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate, 
    screenSize: CGRect = UIScreen.mainScreen().bounds, 
    locationManager = CLLocationManager() 
    ......... 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     ......... 

     let mapView = MKMapView(frame: CGRect(origin: CGPoint(x: 0.0, y: 20.0), 
      size: CGSize(width: screenSize.width, 
       height: screenSize.height-70.0))) 
     mapView.delegate = self 
     self.view.addSubview(mapView) 
    } 

    ......... 
} 

Мой вопрос: что я должен сделать, чтобы справиться с кран пользователя на объекте MAPview? Хотя я искал anwer, прежде чем писать этот пост, я пришел без четкого решения.

+0

Существует только один способ, и используется 'TapGestureRecognizer'. –

+0

Вы имеете в виду получить точку с помощью TapGestureRecognizer и затем преобразовать в координаты карты, используя коэффициент начала и коэффициент масштабирования карты? – Michel

+0

Да, я тоже согласен с комментарием Nirav D', когда я пытаюсь справиться с одним и тем же сценарием, я много искал, но, наконец, я пошел с 'UITapGestureRecognizer' –

ответ

0

При взгляде на documentation нет никакого способа, который обрабатывает касания.

Думаю, вам нужно обнаружить прикосновение, используя UITapGestureRecognizer. touchesBegan не работает, потому что я думаю, что представление карты перехватывает это, как и табличный вид.

После того, как вы обнаружили местоположение касания, используйте метод convert(_:toCoordinateFrom:) для преобразования CGPoint в координатное пространство вида карты на CLLocationCoordinate2D на карте.

Если это звучит слишком хлопотно, вы можете использовать Карты Google. GMSMapView имеет метод делегата mapView(_:didTapAt:), который вы можете реализовать.

0

Пожалуйста, добавьте UITapGestureRecognizer в viewDidLoad.

let gestureRecognizer = UITapGestureRecognizer(target: self, action:#selector(ViewController.getCoordinatePressOnMap(sender:))) 
    gestureRecognizer.numberOfTapsRequired = 1 
    mapView.addGestureRecognizer(gestureRecognizer) 

Внедрение метода getCoordinatePressOnMap.

@IBAction func getCoordinatePressOnMap(sender: UITapGestureRecognizer) { 
    let touchLocation = sender.location(in: mapView) 
    let locationCoordinate = mapView.convert(touchLocation, toCoordinateFrom: mapView) 
    print("Tapped at lat: \(locationCoordinate.latitude) long: \(locationCoordinate.longitude)") 
} 

Примечание:

новообращенный (_: toCoordinateFrom :): Преобразует точку в системе координат указанного Посмотреть на карте координат.

Надеюсь, он сработает для вас !!!

Смежные вопросы