Laura M
Laura M

Reputation: 343

Google Maps iOS SDK Prevent camera zoom after each location update

I have an app which requires the user's location to be constantly updated so I can display their current coordinates and altitude. I'm doing this using the didUpdateLocations function:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.last {
        mapView.camera = GMSCameraPosition(target: locationManager.location!.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
        let locValue : CLLocationCoordinate2D = manager.location!.coordinate
        let altitude : CLLocationDistance = Double(round(1000*manager.location!.altitude)/1000)
        let long = Double(round(10000*locValue.longitude)/10000)
        let lat = Double(round(10000*locValue.latitude)/10000)
        let alt = String(altitude) + " m"
        latitudeLabel.text = String(lat)
        longitudeLabel.text = String(long)
        altitudeLabel.text = alt
        showLearningObjectsWithinRange(location)
    }
}

The problem is, when I try to zoom in on a certain spot on the map, if I move the device even slightly the camera zooms back out again. Obviously this is because of the first line in my didUpdateLocations function setting the camera position, but if I remove that line, the map doesn't center to their location at all.

I tried moving the GMSCameraPosition code to the viewDidLoad, viewWillAppear, and several other places, but this caused the app to crash because it couldn't locate the user in time.

Does anyone have any suggestions on how to make this work? Thanks.

Upvotes: 1

Views: 1258

Answers (2)

Alifa
Alifa

Reputation: 31

use this instead of that certain line (mapview.camera = ...)

mapView.animate(toLocation: CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude))

Upvotes: 1

Teyam
Teyam

Reputation: 8082

With regards to implementing location update, there was an issue posted in GitHub - Implement Responsive User Location Tracking Mode due to location update optimization and going through the thread, a given workaround to show the user location on the map is to call

nMapView.setMyLocationEnabled(true);

instead of:

nMapView.setMyLocationTrackingMode(MyLocationTrackingMode.TRACKING_FOLLOW);

Then, with regards to camera zoom, as discussed in Camera and View - Zoom, you can try setting a minimum or maximum zoom to restrict zoom level. As stated,

You can restrict the range of zoom available to the map by setting a min and max zoom level.

You may also try the solutions given in this SO post - Google Maps iOS SDK, Getting Current Location of user. Hope it helps.

Upvotes: 0

Related Questions