viewDidLoad сбрасывает представление Google Maps после обновления текущего местоположения - PullRequest
0 голосов
/ 12 марта 2019

Я все еще довольно новичок в swift / xcode, так что это может быть простой проблемой с viewDidLoad, которую я просматриваю, но вот что происходит. Я работаю над приложением, которое получает ваше текущее местоположение и отображает ближайшие лыжные горы вокруг вас, используя Google Maps / Places API. Если я запускаю сцену прямо из контроллера навигации, карта отображается правильно со всеми маркерами для гор. Однако я реализую функцию входа в систему, и поэтому, если я загружаю сцену после входа в систему, карты просто сбрасываются к исходным координатам в функции viewDidLoad. Мой код размещен ниже. Мой вопрос, во-первых, как я могу это исправить, чтобы он не сбрасывался до исходных координат, и, во-вторых, почему он делает это только тогда, когда я запускаю его со сцены, которая не является контроллером навигации?

import UIKit
import GoogleMaps
import GooglePlaces
import CoreLocation

class MountainFinderController: UIViewController, CLLocationManagerDelegate {

    let mountainModel = skiMountainData()


    var placesClient: GMSPlacesClient?
    var locationManager = CLLocationManager()
    lazy var mapView = GMSMapView()
    var currentLocation: CLLocationCoordinate2D!
    var mountainMarkers = [GMSMarker]()

    typealias JSONDictionary = [String: Any]

    override func viewDidLoad() {
        super.viewDidLoad()

        //creates initial map view
        let cameraGMAPS = GMSCameraPosition.camera(withLatitude: 0, longitude: 0, zoom: 8)
        mapView = GMSMapView.map(withFrame: CGRect.zero, camera: cameraGMAPS)
        mapView.isMyLocationEnabled = true
        self.view = mapView
        print("created init map")

        //requests authorization to use location
        locationManager.requestAlwaysAuthorization()
        self.locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.startUpdatingLocation()
        print("done loading view")
    }


    override func loadView() {

    }

    //called when startUpdatingLocation is called
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        //gets user location
        let userLocation = locations.last
        currentLocation = CLLocationCoordinate2D(latitude: userLocation!.coordinate.latitude, longitude: userLocation!.coordinate.longitude)
        //moves the camera to the users current location and shows their current location on the map
        let cameraGMAPS = GMSCameraPosition.camera(withLatitude: userLocation!.coordinate.latitude,                                                  longitude: userLocation!.coordinate.longitude, zoom: 8)
        mapView = GMSMapView.map(withFrame: self.view.bounds, camera: cameraGMAPS)
        mapView.isMyLocationEnabled = true
        self.view = mapView

        //function call to get nearest 20 mountains
        mountainModel.getNearbyMountains(lat: locationManager.location!.coordinate.latitude, long: locationManager.location!.coordinate.longitude)
        //adds a marker for each mountain
        print("adding markers")
        addMarkers()
        print("added markers")

        //stops updating the location
        locationManager.stopUpdatingLocation()
    }

    //func to add a marker for each mountain to the map
    func addMarkers(){
        mountainMarkers.removeAll()
        for currMountain in mountainModel.getSkiMountainData() {
            let mountainMarker = GMSMarker()
            mountainMarker.position = CLLocationCoordinate2D(latitude: currMountain.getLat(), longitude: currMountain.getLong())
            mountainMarker.title = currMountain.getName()
            mountainMarker.map = mapView
            mountainMarkers.append(mountainMarker)
        }
        mountainModel.setMountainMarkers(markers: mountainMarkers)
    }
}

1 Ответ

0 голосов
/ 14 марта 2019

Разобрался.Дрюстер был прав, мне пришлось обновить

mapView with mapView.camera = cameraGMAPS

Спасибо, ребята

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...