2016-02-05 27 views
6

我正在嘗試查找用戶位置的緯度和經度,以便我可以將地圖放在用戶的viewdidload中心。如何在Mapbox for iOS SDK中使用userLocation找到正確的位置數據? (Swift)

我已經實現了什麼似乎是正確的代碼,但userLat(latitude)和userLon(經度)的值是關閉的。

N.B.別人有同樣的問題,因爲我,但他的回答是從來沒有解決: Mapbox iOS8 Swift mapView.showUsersLocation

import Mapbox 

class ViewController: UIViewController, MGLMapViewDelegate, CLLocationManagerDelegate { 

// let locationManager = CLLocationManager() 

    @IBOutlet weak var mapView: MGLMapView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Initalise map's center coordinate as vancouver 
     mapView.setCenterCoordinate(CLLocationCoordinate2D(latitude: 49.283382, 
      longitude: -123.117394), 
      zoomLevel: 15, animated: false) 
     view.addSubview(mapView) 

     // Set the delegate property of our map view to self after instantiating it. 
     mapView.delegate = self 

     // User location 
     mapView.showsUserLocation = true 

     let userLoc = mapView.userLocation! 
     userLoc.title = "Hello" 
     userLoc.subtitle = "I am here!" 

     let userLat = userLoc.coordinate.latitude 
     let userLon = userLoc.coordinate.longitude 

     print(userLat, userLon) 

     /* 
     self.locationManager.requestAlwaysAuthorization() 
     if CLLocationManager.locationServicesEnabled() { 
      locationManager.delegate = self 
      locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
      locationManager.startUpdatingLocation() 
     }*/ 

    } 

    func mapView(mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool { 
     return true 
    } 

} 

打印結果:

3.40282346638529e+38 3.40282346638529e+38 

奇怪的是,註釋工作得很好,當我點擊我的位置我得到了標題和副標題。

回答

9

將地圖居中在用戶位置上的最簡單方法是在目標C中設置mapView.userTrackingMode = .FollowMGLUserTrackingModeFollow)。當位置可用時,這將自動移動地圖。

您看到mapView.userLocation的虛假號碼的原因是用戶的位置通常在viewDidLoad中尚未提供。當用戶的位置變得可用並且更新時,使用mapView:didUpdateUserLocation:委派方法得到通知。

0

有一個委託方法叫做mapViewDidFinishLoadingMap。在此方法中將地圖的中心設置爲用戶座標。

func mapViewDidFinishLoadingMap(_ mapView: MGLMapView) { 
    mapView.setCenter((mapView.userLocation?.coordinate)!, animated: false) 
} 
相關問題