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