ضبط الكاميرا

تتيح لك الكاميرا تغيير وجهة نظر المستخدم للخريطة. يمكنك استخدام أوضاع الكاميرا للتحكّم في سلوك الخريطة أثناء التنقّل. لضبط وضع الكاميرا، اضبط السمة cameraMode الخاصة بعرض الخريطة، مع تحديد إحدى الثوابت التالية لوضع الكاميرا:

  • التتبُّع: هو وضع الكاميرا التلقائي للتنقّل. تغيير زاوية العرض إلى 45 درجة ووضع الكاميرا خلف الموضع الحالي مع توجيهها في اتجاه السير أثناء التنقّل، تضبط الكاميرا تلقائيًا اتجاهها نحو وجهة السفر. سيؤدي الضغط على زر إعادة تحديد المركز في الخريطة إلى التبديل إلى هذا الوضع أيضًا. لا يظهر زر إعادة التوسيط عند اختيار هذا الوضع.

  • نظرة عامة: تعرض هذه الشاشة نظرة عامة على المسار بأكمله، مع تكبير أو تصغير الخريطة حسب الحاجة لتلائم المسار في عرض الخريطة. عند تحديد طريقة العرض هذه، يظهر زر إعادة التوسيط.

  • مجاني: يتيح للمستخدم تغيير طريقة عرض الخريطة باستخدام الإيماءات. تبقى الكاميرا ثابتة في هذا العرض. ستنتقل الخريطة تلقائيًا إلى هذا العرض إذا حرّك المستخدم الخريطة أو كبّرها أو صغّرها أثناء التنقّل. عند تحديد طريقة العرض هذه، يظهر الزر إعادة توسيط.

لتغيير وضع الكاميرا، اضبط السمة cameraMode لعرض الخريطة، كما هو موضح هنا:

Swift

// 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;

إعادة توسيط الخريطة تلقائيًا

عندما ينقل المستخدمون الخريطة في وضع "التنقّل"، يتغيّر وضع الكاميرا لعرض الخريطة من وضع "المتابعة" إلى وضع "التنقّل الحر". تعود الكاميرا إلى وضع التتبُّع عندما يضغط المستخدم صراحةً على إعادة التوسيط. يمكنك إعداد عملية الرجوع إلى وضع "المتابعة" تلقائيًا من خلال استخدام مؤقت لضبط فاصل زمني بين الخروج من وضع "المتابعة" والرجوع إليه تلقائيًا.

مثال

يتحقّق مثال الرمز البرمجي التالي لتحديد ما إذا كان المستخدم ينقل الخريطة أثناء التنقّل. إذا كان الأمر كذلك، سيتم ضبط مؤقت لتبديل وضع الكاميرا إلى وضع التتبّع، مع توسيط الخريطة بعد خمس ثوانٍ.

Swift

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