Uygulamanızın, kullanıcı bir rota üzerinde ilerlerken değişen çeşitli etkinlikleri dinlemesini ve bunlara yanıt vermesini sağlamak için bu kılavuzdan yararlanın. Bu kılavuzda rota tanımlama değil, yalnızca bir rota üzerindeki etkinliklere yanıt verme konusu ele alınmaktadır.
Genel Bakış
iOS için Navigation SDK, kullanıcının konumu ve rota üzerindeki koşullarla ilişkili dinleyiciler ile önemli zaman ve mesafe verileri sağlar. Uygulamanızın, haritanın görünüm denetleyicisinde aşağıdaki dinleyiciler için protokolleri benimsemesi gerekir:
GMSRoadSnappedLocationProviderListener
ve
GMSNavigatorListener
.
Bu listede, gezinme etkinlikleri için kullanılabilen işleyici yöntemleri gösterilmektedir:
GMSNavigatorListener.didArriveAtWaypoint
, hedefe ulaşıldığında tetiklenir.GMSNavigatorListener.navigatorDidChangeRoute
, rota değiştiğinde tetiklenir.GMSNavigatorListener.didUpdateRemainingTime
, yol tarifi etkin durumdayken bir sonraki hedefe ulaşma süresi değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateRemainingDistance
, rehberlik etkin durumdayken bir sonraki varış noktasına olan mesafe değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateDelayCategory
, rehberlik etkin durumdayken bir sonraki hedefe olan gecikme kategorisi değiştiğinde çağrılır.- Tahmini aydınlatma koşulları güncellendiğinde tetiklenen
GMSNavigatorListener.didChangeSuggestedLightingMode
. Örneğin, kullanıcının mevcut konumunda gece olduğunda aydınlatma değişir. GMSNavigatorListener.didUpdateSpeedingPercentage
, Sürücü hız sınırını aştığında tetiklenir.GMSRoadSnappedLocationProviderListener.didUpdateLocation
, kullanıcının konumu değiştikçe tekrar tekrar çağrılır.
Kodu görüntüleme
Gerekli protokollere uygunluk beyanında bulunma
Gezinme yöntemlerini uygulamadan önce görünüm denetleyicisinin aşağıdaki protokolleri benimsemesi gerekir:
Swift
class ViewController: UIViewController, GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener>
@end
Navigasyon protokollerini uyguladıktan sonra dinleyicileri görünüm denetleyicisine ayarlayın. Örneğin, aşağıdaki kodu viewDidLoad()
yöntemine ekleyebilirsiniz.
Swift
mapView.navigator?.add(self) mapView.roadSnappedLocationProvider?.add(self)
Objective-C
[_mapView.navigator addListener:self]; [_mapView.roadSnappedLocationProvider
addListener:self];
Konum güncellemelerini alma veya durdurma
Kullanıcının haritadaki ilerleme durumunu göstermek için konum güncellemeleri gerekir.
location
örneği aşağıdaki özellikleri kullanıma sunar:
Konum özelliği | Açıklama |
---|---|
yükseklik | Mevcut yükseklik. |
coordinate.latitude | Yola sabitlenmiş mevcut enlem koordinatı. |
coordinate.longitude | Yola sabitlenmiş mevcut boylam koordinatı. |
kurs | Mevcut yön derece cinsinden. |
hız | Şu anki hız. |
timestamp | Mevcut okumanın tarihi/saati. |
Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation
işlevini çağırın ve didUpdateLocation
etkinliğini işlemek için GMSRoadSnappedLocationProviderListener
işlevini kullanın.
Aşağıdaki örnekte startUpdatingLocation
çağrısı gösterilmektedir:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
Aşağıdaki kod, didUpdateLocation
etkinliğini işleyen bir GMSRoadSnappedLocationProviderListener
oluşturur.
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); }
Uygulama arka plandayken konum güncellemeleri almak için allowsBackgroundLocationUpdates
değerini true olarak ayarlayın:
Swift
mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsBackgroundLocationUpdates = YES;
Varış etkinliklerini algılama
Uygulamanız, bir hedefe ulaşıldığını tespit etmek için didArriveAtWaypoint
etkinliğini kullanıyor. continueToNextDestination()
tuşuna basıp rehberliği yeniden etkinleştirerek rehberliğe devam edebilir ve bir sonraki yol noktasına geçebilirsiniz. Uygulamanız, continueToNextDestination()
çağrıldıktan sonra rehberliği yeniden etkinleştirmelidir.
Uygulama continueToNextDestination
işlevini çağırdıktan sonra gezinme aracı, önceki hedefle ilgili verilere artık sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestination()
işlevini çağırmadan önce bu bilgileri navigatörden almanız gerekir.
Aşağıdaki kod örneğinde, didArriveAtWaypoint
etkinliğini işleme yöntemi gösterilmektedir:
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; }
Rota değişikliği güncellemelerini alma
Rota her değiştirildiğinde bildirim almak için navigatorDidChangeRoute
etkinliğini işleyecek bir yöntem oluşturun. GMSNavigator
öğesinin routeLegs
ve currentRouteLeg
özelliklerini kullanarak yeni rotaya erişebilirsiniz.
Swift
func navigatorDidChangeRoute(_ navigator: GMSNavigator) { print("The route has
changed.") }
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"The route
has changed."); }
Hedefe varış zamanı güncellemelerini alma
Hedefe varış zamanıyla ilgili sürekli güncellemeler almak için didUpdateRemainingTime
etkinliğini işleyecek bir yöntem oluşturun. time
parametresi, bir sonraki hedefe ulaşılana kadar geçen tahmini süreyi saniye cinsinden sağlar.
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); }
Tahmini süredeki bir sonraki hedefe ulaşma süresindeki minimum değişikliği ayarlamak için GMSNavigator
üzerinde timeUpdateThreshold
özelliğini ayarlayın. Değer saniye cinsinden belirtilir. Bu özellik ayarlanmamışsa hizmetler bir saniyelik varsayılan değeri kullanır.
Swift
navigator?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
Hedefe olan mesafeyle ilgili güncellemeleri alma
Hedefe olan mesafeyle ilgili sürekli güncellemeler almak için didUpdateRemainingDistance
etkinliğini işleyecek bir yöntem oluşturun. distance
parametresi, bir sonraki hedefe olan tahmini mesafeyi metre cinsinden sağlar.
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]); }
Tahmini mesafede bir sonraki hedefe doğru minimum değişikliği ayarlamak için distanceUpdateThreshold
özelliğini GMSNavigator
üzerinde ayarlayın (değer metre cinsinden belirtilir). Bu özellik ayarlanmamışsa hizmetler varsayılan olarak bir metre değerini kullanır.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
Trafik güncellemelerini alma
Rotanın geri kalan kısmındaki trafik akışıyla ilgili sürekli güncellemeler almak için didUpdateDelayCategory
etkinliğini işleyecek bir yöntem oluşturun. delayCategoryToNextDestination
işlevine yapılan bir çağrı, 0 ile 3 arasında bir değer sağlayan GMSNavigationDelayCategory
değerini döndürür. Kategorideki güncellemeler, uygulama kullanıcısının mevcut konumuna göre yapılır. Trafik verileri kullanılamıyorsa GMSNavigationDelayCategory
0 değerini döndürür. 1-3 arasındaki sayılar, akışın hafiften şiddetliye doğru arttığını gösterir.
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
özelliği aşağıdaki gecikme düzeylerini sunar:
Gecikme kategorisi | Açıklama |
---|---|
GMSNavigationDelayCategoryNoData | 0 - Kullanılamıyor, trafik veya : |
rotayı seçin. | |
GMSNavigationDelayCategoryHeavy | 1 - Kalın. |
GMSNavigationDelayCategoryMedium | 2 - Orta. |
GMSNavigationDelayCategoryLight | 3 - Işık. |
Hız güncellemelerini alma
Bir sürücü hız sınırını aştığında güncelleme almak için didUpdateSpeedingPercentage
etkinliğini işleyecek bir yöntem oluşturun.
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); }
Önerilen aydınlatma modunu değiştirme
Işıklandırmadaki tahmini değişikliklerle ilgili güncellemeler almak için didChangeSuggestedLightingMode
etkinliğini işleyecek bir yöntem oluşturun.
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; }