Как сделать так, чтобы моя карта Google всегда отслеживала пользователя и не позволяла ему прокручиваться

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


person skyleguy    schedule 20.11.2016    source источник


Ответы (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)
    }
}

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

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

person Nishant Shrestha    schedule 22.11.2016
comment
так этот метод запускается всякий раз, когда он замечает, что местоположение пользователя изменилось? Он запускается только при срабатывании manager.startUpdatingLocation ()? Останавливается ли он при вызове manager.stopUpdatingLocation ()? - person skyleguy; 22.11.2016
comment
и, по вашему мнению, где было бы хорошее место для первого вызова startUpdatingLocation? - person skyleguy; 22.11.2016
comment
@skyleguy Да. Этот конкретный метод делегата вызывается при изменении местоположения пользователя. [Документы Apple] (developer.apple.com/reference/corelocation/) заявляют, что он вызывается всякий раз, когда появляются новые данные о местоположении. Это обычно означает изменение местоположения пользователя. Метод делегата остановится при вызове stopUpdatingLocation (). Что касается хорошего места для начала обновления местоположения, это во многом зависит от вашего варианта использования. Исходя из вашего первоначального вопроса, я думаю, что viewDidLoad может быть хорошим местом для вас. - person Nishant Shrestha; 23.11.2016