Отрегулируйте камеру

Камера позволяет изменять точку обзора карты пользователем. Вы можете использовать режимы камеры для управления поведением карты во время навигации. Чтобы задать режим камеры, задайте свойство cameraMode вида карты, указав одну из следующих констант режима камеры:

  • Follow — режим камеры по умолчанию для навигации. Изменяет угол обзора на 45 градусов и помещает камеру позади текущего положения лицом по направлению движения. Во время навигации камера автоматически подстраивается под направление движения. Нажатие кнопки Re-center карты также переключит в этот режим. Кнопка Re-center не видна, если выбран этот режим.

  • Обзор — Отображает обзор всего маршрута, масштабируя по мере необходимости, чтобы вписать маршрут в вид карты. При выборе этого вида видна кнопка Re-center .

  • Бесплатно — позволяет пользователю изменять вид карты с помощью жестов . Камера остается неподвижной в этом виде. Карта автоматически перейдет в этот вид, если пользователь панорамирует или масштабирует во время навигации. При выборе этого вида видна кнопка Re-center .

Чтобы изменить режим камеры, задайте свойство cameraMode вида карты, как показано здесь:

Быстрый

// Set the mode to "overview":
mapView.cameraMode = .overview

// Set the mode to "free":
mapView.cameraMode = .free

// Set the mode to "following":
mapView.cameraMode = .following

Objective-C

// Set the mode to "overview":
mapView.cameraMode = GMSNavigationCameraModeOverview;

// Set the mode to "free":
mapView.cameraMode = GMSNavigationCameraModeFree;

// Set the mode to "following":
mapView.cameraMode = GMSNavigationCameraModeFollowing;

Автоматически центрировать карту

Когда пользователи перемещают карту в режиме навигации, режим камеры для просмотра карты меняется с режима следования на свободный режим. Камера возвращается в режим следования, когда пользователь явно нажимает Re-center . Вы можете автоматизировать возврат в режим следования, используя таймер для установки интервала между выходом из режима следования и автоматическим возвратом в него.

Пример

Следующий пример кода проверяет, перемещает ли пользователь карту в режиме навигации. Если перемещает, то устанавливает таймер для переключения режима камеры в режим следования, центрируя карту через пять секунд.

Быстрый

class YourViewController: UIViewController {

  @IBOutlet weak var mapView: GMSMapView!
  var autoFollowTimer: Timer!

  override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self
    ...
  }

  ...
}

/** Implements the GMSMapViewDelegate protocol. */
extension YourViewController: GMSMapViewDelegate {
  func mapView(_ mapView: GMSMapView, willMove gesture: Bool) {
    if mapView.navigator?.isGuidanceActive == false {return}
    if !gesture {return}

    autoFollowTimer?.invalidate()
    autoFollowTimer = Timer(
      timeInterval: TimeInterval(5.0),
      target: self,
      selector: #selector(recenterMap),
      userInfo: nil,
      repeats: false)
    RunLoop.current.add(autoFollowTimer, forMode: .default)
  }

  /** Centers the map in guidance mode. */
  @objc private func recenterMap() {
    if mapView.navigator?.isGuidanceActive == true {
       mapView.cameraMode = .following
    }

    autoFollowTimer.invalidate()
    autoFollowTimer = nil
  }
}

Objective-C

@interface YourViewController : UIViewController<GMSMapViewDelegate>
...
@end


@implementation YourViewController {
  GMSMapView *_mapView;
  NSTimer *_autoFollowTimer;
  ...
}

...

- (void)viewDidLoad {
  [super viewDidLoad];
  ...
  _mapView.delegate = self;
  ...
}

...

/** Implements the GMSMapViewDelegate protocol. */
- (void)mapView:(GMSMapView *)mapView willMove:(BOOL)gesture {
  if (!_mapView.navigator.guidanceActive) return;
  if (!gesture) return;

  [_autoFollowTimer invalidate];
  _autoFollowTimer = [NSTimer scheduledTimerWithTimeInterval:5.0
                                                      target:self
                                                    selector:@selector(recenterMap)
                                                    userInfo:nil
                                                     repeats:NO];
}

/** Centers the map in guidance mode. */
- (void)recenterMap {
  if (_mapView.navigator.guidanceActive) {
    _mapView.cameraMode = GMSNavigationCameraModeFollowing;
  }

  [_autoFollowTimer invalidate];
  _autoFollowTimer = nil;
}

@end