ضبط الكاميرا

تتيح لك الكاميرا تغيير وجهة نظر المستخدِم المتعلّقة بالخريطة. يمكنك استخدام أوضاع الكاميرا للتحكّم في سلوك الخريطة أثناء التنقّل. لضبط وضع الكاميرا، اضبط السمة 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