Я все еще довольно новичок в 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)
}
}