استخدِم هذا الدليل للسماح لتطبيقك بالاستماع إلى مجموعة متنوعة من الأحداث والاستجابة لها. تتغير أثناء تنقل المستخدم على طول المسار. لا يغطي هذا الدليل وتحديد المسار، والاستجابة فقط للأحداث على طول المسار.
نظرة عامة
توفر لك حزمة تطوير البرامج (SDK) للتنقل لنظام التشغيل iOS أدوات استماع
المرتبطة بموقع المستخدم والظروف على طول المسار
بيانات الوقت والمسافة المهمة. في وحدة تحكم العرض للخريطة، يبرز تطبيقك
إلى تبني بروتوكولات مع هؤلاء المستمعين:
GMSRoadSnappedLocationProviderListener
أو
GMSNavigatorListener
تعرض هذه القائمة طرق الاستماع المتاحة لأحداث التنقّل:
GMSNavigatorListener.didArriveAtWaypoint
, يتم تشغيله عند الوصول إلى وجهة معيّنة.GMSNavigatorListener.navigatorDidChangeRoute
, يتم تشغيله عند تغيير المسار.GMSNavigatorListener.didUpdateRemainingTime
, يتم طلبها بشكل متكرر مع تغير الوقت إلى الوجهة التالية، بينما تفعيل الإرشادات.GMSNavigatorListener.didUpdateRemainingDistance
, يتم وصفها بشكل متكرر حيث تتغير المسافة إلى الوجهة التالية، بينما تفعيل الإرشادات.GMSNavigatorListener.didUpdateDelayCategory
, يتم استدعاؤه عند تغيير فئة التأخير إلى الوجهة التالية، بينما تفعيل الإرشادات.GMSNavigatorListener.didChangeSuggestedLightingMode
, يتم تشغيله عند تعديل ظروف الإضاءة المقدّرة. على سبيل المثال: عندما يحل الليل في الموقع الحالي للمستخدم، تتغير الإضاءة.GMSNavigatorListener.didUpdateSpeedingPercentage
, يتم تشغيلها عندما يتجاوز السائق حد السرعة المسموح به.GMSRoadSnappedLocationProviderListener.didUpdateLocation
, يتم الاتصال بها بشكل متكرر كلما تغير موقع المستخدم الجغرافي.
الاطّلاع على الرمز
إعلان التوافق مع البروتوكولات المطلوبة
قبل تنفيذ طرق التنقل، يجب أن تتبنى وحدة التحكم في طريقة العرض البروتوكولات:
Swift
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
بعد اعتماد بروتوكولات التنقل، اضبط أدوات معالجة الصوت على طريقة العرض
المستخدم. على سبيل المثال، يمكنك إضافة الرمز التالي إلى viewDidLoad()
.
.
Swift
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];
تلقّي تحديثات الموقع الجغرافي أو إيقافها
تحديثات الموقع مطلوبة لعرض تقدم المستخدم على الخريطة.
يعرض المثيل location
السمات التالية:
خاصية الموقع الجغرافي | الوصف |
---|---|
الارتفاع | الارتفاع الحالي. |
coordinate.latitude | إحداثي خط العرض الحالي الذي تم التقاطه للطريق |
coordinate.longitude | إحداثي خط الطول الحالي الذي تم قطعه على الطريق |
دورة | الاتجاه الحالي بالدرجات. |
السرعة | السرعة الحالية |
timestamp | تاريخ/وقت القراءة الحالية. |
لتلقي تحديثات الموقع الجغرافي بشكل مستمر، اتصل
mapView.roadSnappedLocationProvider.startUpdatingLocation
واستخدام
GMSRoadSnappedLocationProviderListener
للتعامل مع didUpdateLocation
فعالية.
يوضح المثال التالي حالة الاتصال بالرقم startUpdatingLocation
:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
ينشئ الرمز التالي عنصر GMSRoadSnappedLocationProviderListener
الذي
معالجة حدث didUpdateLocation
.
Swift
func locationProvider(_ locationProvider: GMSRoadSnappedLocationProvider,
didUpdate location: CLLocation) { print("Location: \(location.description)") }
Objective-C
- (void)locationProvider:(GMSRoadSnappedLocationProvider *)locationProvider
didUpdateLocation:(CLLocation *)location { NSLog(@"Location: %@",
location.description); }
لتلقّي تحديثات بشأن الموقع الجغرافي عندما يعمل التطبيق في الخلفية، اضبط
allowsBackgroundLocationUpdates
إلى true:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
رصد أحداث الوصول
يستخدم تطبيقك حدث didArriveAtWaypoint
لرصد الحالات التي تحتوي فيها الوجهة على
الذي تم الوصول إليه. يمكنك استئناف الإرشادات والانتقال إلى النقطة التالية من خلال
الاتصال بـ continueToNextDestination()
، ثم إعادة تفعيل الإرشادات. تطبيقك
يجب إعادة تفعيل الإرشادات بعد الاتصال بـ continueToNextDestination()
.
بعد استدعاء التطبيق لـ continueToNextDestination
، لن تتوفر في أداة التنقّل
بيانات عن الوجهة السابقة. إذا أردت تحليل معلومات حول
جزء المسار، يجب استرداد هذا من المستكشف قبل الاتصال
continueToNextDestination()
يعرض مثال الرمز التالي طريقة للتعامل مع didArriveAtWaypoint
.
الحدث:
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint:
GMSNavigationWaypoint) { print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestination()
mapView.navigator?.isGuidanceActive = true }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint { NSLog(@"You have
arrived at: %@", waypoint.title); [_mapView.navigator
continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }
تلقّي تحديثات بشأن تغيير المسار
لتلقّي إشعار عند تغيير المسار، يمكنك إنشاء طريقة
التعامل مع حدث navigatorDidChangeRoute
. يمكنك الوصول إلى المسار الجديد من خلال
باستخدام السمتَين routeLegs
وcurrentRouteLeg
في GMSNavigator
.
Swift
func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
has changed."); }
وقت الاستلام المتعلّق بالتحديثات المتعلقة بوجهة الإعلانات
لتلقي تحديثات الوقت المستمر للوجهة، أنشئ طريقة للتعامل مع
حدث واحد (didUpdateRemainingTime
). توفر المعلمة time
القيمة المقدَّرة
المستخدم بالثواني إلى أن يتم الوصول إلى الوجهة التالية.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time:
TimeInterval) { print("Time to next destination: \(time)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Time to next
destination: %f", time); }
لضبط الحد الأدنى للتغيير في الوقت المقدر للوجهة التالية، اضبط
فندق واحد (timeUpdateThreshold
) في GMSNavigator
يتم تحديد القيمة في
ثوانٍ. إذا لم يتم ضبط هذه السمة، تستخدم الخدمات القيمة التلقائية وهي واحدة.
ثانيًا.
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
تلقي تحديثات المسافة إلى الوجهة
للحصول على تحديثات مستمرة حول المسافة إلى الوجهة، أنشِئ طريقة للتعامل مع البيانات
الحدث didUpdateRemainingDistance
. توفر المعلمة distance
المسافة المقدرة بالأمتار، إلى الوجهة التالية.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance distance:
CLLocationDistance) { let miles = distance * 0.00062137 print("Distance to next
destination: \(miles) miles.") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateRemainingDistance:(CLLocationDistance)distance { double miles =
distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Distance to
next destination: %.2f.", miles]); }
لضبط أقل تغيير في المسافة المقدَّرة للوجهة التالية، عليك ضبط
سمة distanceUpdateThreshold
على GMSNavigator
(القيمة محدّدة في
متر). إذا لم يتم ضبط هذه السمة، تستخدم الخدمات القيمة التلقائية وهي واحدة.
متر.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
تلقي تحديثات حركة المرور
لتلقي تحديثات مستمرة لتدفق حركة المرور للمسار المتبقي،
أنشِئ طريقة لمعالجة حدث didUpdateDelayCategory
. مكالمة إلى
delayCategoryToNextDestination
التي تُرجع GMSNavigationDelayCategory
والتي
قيمة تتراوح بين 0 و3. تستند التعديلات التي يتم إجراؤها على الفئة إلى القيمة الحالية
موضع مستخدم التطبيق. إذا كانت بيانات حركة المرور غير متاحة،
وتُرجع الدالة GMSNavigationDelayCategory
القيمة 0. تشير الأرقام 1-3 إلى زيادة
من الخفيفة إلى الثقيلة.
Swift
func navigator(_ navigator: GMSNavigator, didUpdate delayCategory:
GMSNavigationDelayCategory) { print("Traffic flow to next destination:
\(delayCategory)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator
didUpdateDelayCategory:(GMSNavigationDelayCategory)delayCategory {
NSLog(@"Traffic flow to next destination: %ld", (long)delayCategory); }
تعرض السمة GMSNavigationDelayCategory
مستويات التأخير التالية:
فئة التأخير | الوصف |
---|---|
GMSNavigationDelayCategoryNoData | 0 - غير متاح، أو لا توجد بيانات عن حركة المرور أو : |
المسار. | |
GMSNavigationDelayCategoryHeavy | 1 - ثقيل. |
GMSNavigationDelayCategoryMedium | 2 - متوسط |
GMSNavigationDelayCategoryLight | 3 - خفيف |
جارٍ تلقّي تحديثات السرعة
لتلقّي الإشعارات عندما يتجاوز أحد السائقين الحدّ الأقصى للسرعة، يمكنك إنشاء طريقة.
لمعالجة حدث didUpdateSpeedingPercentage
.
Swift
// Listener to handle speeding events. func navigator( _ navigator:
GMSNavigator, didUpdateSpeedingPercentage percentageAboveLimit: CGFloat ) {
print("Speed is \(percentageAboveLimit) above the limit.") }
Objective-C
// Listener to handle speeding events. - (void)navigator:(GMSNavigator
*)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit {
NSLog(@"Speed is %f percent above the limit.", percentageAboveLimit); }
جارٍ تغيير وضع الإضاءة المقترَح
لتلقّي آخر الأخبار حول التغييرات المقدَّرة في الإضاءة، يجب إنشاء طريقة للتعامل مع هذه التغييرات.
الحدث didChangeSuggestedLightingMode
.
Swift
// Define a listener for suggested changes to lighting mode. func navigator(_
navigator: GMSNavigator, didChangeSuggestedLightingMode lightingMode:
GMSNavigationLightingMode) { print("Suggested lighting mode has changed:
\(String(describing: lightingMode))")
// Make the suggested change. mapView.lightingMode = lightingMode }
Objective-C
// Define a listener for suggested changes to lighting mode.
-(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode:
(GMSNavigationLightingMode)lightingMode { NSLog(@"Suggested lighting mode has
changed: %ld", (long)lightingMode);
// Make the suggested change. _mapView.lightingMode = lightingMode; }