2016-12-02 87 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對象用戶的水龍頭? 雖然我在寫這篇文章之前一直在尋找這個問題,但我沒有找到明確的解決方案。

+0

只有一種方法,它使用'TapGestureRecognizer'。 –

+0

您的意思是使用TapGestureRecognizer獲取該點,然後使用地圖的原點和縮放因子轉換爲地圖座標? – Michel

+0

是的,我同意'Nirav D'的評論,當我嘗試處理相同的情況時,我搜索了很多,但最後我用'UITapGestureRecognizer'去了 –

回答

0

通過查看documentation,沒有任何處理觸摸的方法。

我認爲你必須使用UITapGestureRecognizer檢測觸摸。 touchesBegan不起作用,因爲我認爲地圖視圖攔截了它,就像表格視圖一樣。

在檢測到觸摸位置後,使用convert(_:toCoordinateFrom:)方法將地圖視圖的座標空間中的CGPoint轉換爲地圖上的CLLocationCoordinate2D

如果這聽起來太麻煩了,您可以改用Google地圖。 GMSMapView有一個可以實現的委託方法mapView(_:didTapAt:)方法。

0

請在viewDidLoad中加上UITapGestureRecognizer

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 :):指定 視圖的座標系統中的點轉換爲地圖座標。

希望它適合你!