2016-02-03 2 views
0

Я работаю над приложением, которое использует карты Google для отображения набора контактов, и я хочу, чтобы камера карты начиналась с местоположения пользователя. Я попытался написать следующий код (в Swift 2.0), но он не помещает меня в текущее местоположение устройства, вместо этого он показывает мне пустой синий экран (который я нашел как точную середину карты). Вот скриншот того, что у меня естьiOS Google Maps SDK Не показывать местоположение пользователя

Here's a screenshot of what I have

Я использовал следующие библиотеки при написании этого кода:

Google Maps SDK

OneShotLocationManager

Вот код, который у меня есть (в ViewController.swift)

import UIKit 
import GoogleMaps 

class ViewController: UIViewController, GMSMapViewDelegate { 

    var manager: OneShotLocationManager? 

    var userlat: Double = 0.0 
    var userlng: Double = 0.0 

    override func viewDidLoad() { 
     manager = OneShotLocationManager() 
     manager!.fetchWithCompletion {location, error in 

      // fetch location or an error 
      if let loc = location { 
       print(loc) 
       self.userlat = loc.coordinate.latitude 
      } else if let err = error { 
       print(err.localizedDescription) 
      } 
      self.manager = nil 
     } 


     super.viewDidLoad() 

     let camera = GMSCameraPosition.cameraWithLatitude(userlat, 
      longitude: userlng, zoom: 6) 

     let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 
     mapView.myLocationEnabled = true 
     mapView.delegate = self 
     self.view = mapView 

     let marker = GMSMarker() 
     marker.position = CLLocationCoordinate2DMake(-33.86, 151.20) 
     marker.title = "Sydney" 
     marker.snippet = "Australia" 
     marker.map = mapView 
    } 

    func mapView(mapView: GMSMapView!, markerInfoWindow marker: GMSMarker!) -> UIView! { 
     let infoWindow = NSBundle.mainBundle().loadNibNamed("CustomInfoWindow", owner: self, options: nil).first! as! CustomInfoWindow 
     infoWindow.label.text = "\(marker.position.latitude) \(marker.position.longitude)" 
     return infoWindow 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

И вот консольный вывод после запуска приложения. Обратите внимание, что он выводит текущее местоположение пользователя:

< + 51.50998000, -0.13370000> +/- 5.00m (скорость -1.00 mps/course -1.00) @ 2/3/16, 8:47:57 AM Pacific Стандартное время 2016-02-03 08: 47: 57.545 Hanky ​​Ranky [3379: 260848] Google Maps SDK для версии iOS: 1.11.21919.0

Спасибо за помощь, ребята!

ответ

1

Возможно, вам не хватает двух свойств в ViewController.swift.

var locationManager = CLLocationManager() 

var didFindMyLocation = false 

locationManager свойство будет использоваться, чтобы попросить разрешения пользователя, чтобы следить за его/ее место, а затем на основе статуса авторизации либо показывать его/ее текущее местоположение или нет. Флаг didFindMyLocation будет использоваться, чтобы мы знали, была ли обнаружена текущая позиция пользователя на карте или нет, и в конечном итоге избежать ненужных обновлений местоположения.

Возможно, это Swift Tutorial for Google Maps.

0
class ViewController: UIViewController, GMSAutocompleteViewControllerDelegate 
{ 


    var placeName: String = "Default" 
    var userlat: CLLocationDegrees = 0 
    var userlng: CLLocationDegrees = 0 

    override func viewDidLoad() { 
    super.viewDidLoad() 


    let acController = GMSAutocompleteViewController() 
    acController.delegate = self 
    self.presentViewController(acController, animated: true, completion: nil) 




    // Do any additional setup after loading the view. 
    } 

    override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    let camera = GMSCameraPosition.cameraWithLatitude(userlat, 
     longitude: userlng, zoom: 6) 

    let mapView = GMSMapView.mapWithFrame(CGRectZero, camera: camera) 
    mapView.myLocationEnabled = true 
    mapView.delegate = self 


    let marker = GMSMarker() 
    marker.position = CLLocationCoordinate2DMake(-33.86, 151.20) 
    marker.title = "Sydney" 
    marker.snippet = "Australia" 
    marker.map = mapView 

    self.view = mapView 

    } 


    func viewController(viewController: GMSAutocompleteViewController!, didAutocompleteWithPlace place: GMSPlace!) { 

    lat = place.coordinate.latitude 
    longi = place.coordinate.longitude 
    placeName = place.name 
    } 

} 

Я надеюсь, что это помогает ...

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