2016-11-20 7 views
0

У меня есть GMSMapView, связанный с моей переменной mapView. Он настроен и даже ставит на карту случайную полилинию на карте. В настоящее время у меня есть кнопка навигации, но все, что она делает, - это увеличение на пользователя. Я хотел бы сделать так, чтобы после того, как они попали в «навигацию», камера заставит следить за пользователем и не позволяет им прокручиваться вдали от своего местоположения (как и приложение Google Maps). Как я могу сделать это возможным? Благодаря!Как заставить мою карту Google следовать за пользователем в любое время и не позволять им прокручиваться

ответ

1

Я предполагаю, что вы уже получили CLLocationManager и начали обновлять его местоположение. Как только это будет сделано, вы хотите установить камеру mapView в методе делегата CLLocationManager при изменении местоположения.

Что-то вдоль линий этого:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if let location = manager.location { 
     // Create camera with the user's new location 
     let camera = GMSCameraPosition.cameraWithLatitude(location.coordinates.latitude, longitude: location.coordinates.longitude, zoom: 17.0) 
     // Animate the map to the new camera position 
     mapView.animateToCameraPosition(camera) 
    } 
} 

поиграться с параметрами масштабирования, чтобы получить результат, который вы хотите.

Надеюсь, это поможет.

+0

поэтому этот метод запускается всякий раз, когда он замечает, что местоположение пользователя изменилось? Выполняется ли это только при возникновении «manager.startUpdatingLocation()»? Остановится ли это при вызове «manager.stopUpdatingLocation()»? – skyleguy

+0

и, на ваш взгляд, где было бы хорошим местом для первого вызова startUpdatingLocation? – skyleguy

+0

@skyleguy Да. Этот конкретный метод делегата вызывается всякий раз, когда изменяется местоположение пользователя. [Документы Apple] (https://developer.apple.com/reference/corelocation/clocationmanagerdelegate) заявляет, что он вызывается, когда есть новые данные о местоположении. Это _usually_ означает, когда изменяется местоположение пользователя. Метод delegate остановится при вызове stopUpdatingLocation(). Что касается хорошего места для запускаОбновление местоположения, это во многом зависит от вашего варианта использования. Исходя из вашего первоначального вопроса, я думаю, что viewDidLoad может быть хорошим местом для вас. –