Uygulamanızın, kullanıcı bir rotada gezinirken değişen çeşitli etkinlikleri dinleyip yanıt vermesini sağlamak için bu kılavuzu kullanın. Bu kılavuzda rota tanımlama ele alınmamaktadır, yalnızca rota üzerindeki etkinliklere yanıt verilir.
Genel bakış
iOS için Gezinme SDK'sı, kullanıcının konumuyla ve rota üzerindeki koşullarla ilişkilendirilmiş işleyicilerin yanı sıra önemli zaman ve mesafe verilerini sağlar. Haritanın görünüm denetleyicisinde, uygulamanızın şu dinleyiciler için protokolleri benimsemesi gerekir:
GMSRoadSnappedLocationProviderListener
ve
GMSNavigatorListener
.
Bu liste, gezinme etkinlikleri için kullanılabilen işleyici yöntemlerini gösterir:
GMSNavigatorListener.didArriveAtWaypoint
, bir hedefe ulaşıldığında tetiklenir.GMSNavigatorListener.navigatorDidChangeRoute
, rota değiştiğinde tetiklenir.- Tavsiye etkinken sonraki hedefe giden süre değiştikçe
GMSNavigatorListener.didUpdateRemainingTime
tekrar tekrar çağrılır. - Tavsiye etkinken sonraki hedefe olan mesafe değiştikçe
GMSNavigatorListener.didUpdateRemainingDistance
tekrar tekrar çağrılır. GMSNavigatorListener.didUpdateDelayCategory
, rehberlik etkinken sonraki hedefe giden gecikme kategorisi değiştiğinde çağrılır.GMSNavigatorListener.didChangeSuggestedLightingMode
, tahmini aydınlatma koşulları güncellendiğinde tetiklenir. Örneğin, kullanıcının bulunduğu yerde gece aktığında ışık 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ştiğinde tekrar tekrar çağrılır.
Kodu inceleyin
Gerekli protokollere uygunluk beyanı
Gezinme yöntemlerini uygulamadan önce, görünüm denetleyicisinin protokolleri benimsemesi gerekir:
Swift
class ViewController: UIViewController, GMSNavigatorListener, GMSRoadSnappedLocationProviderListener {
Objective-C
@interface ViewController () <gmsnavigatorlistener, gmsroadsnappedlocationproviderlistener=""></gmsnavigatorlistener,>
@son
Gezinme protokollerini benimsedikten sonra, işleyicileri görünüm denetleyicisine ayarlayın. Örneğin, viewDidLoad()
yöntemine aşağıdaki kodu 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 ilerleme durumunu harita üzerinde göstermek için konum güncellemeleri gereklidir.
location
örneği aşağıdaki özellikleri gösterir:
Konum mülkü | Açıklama |
---|---|
rakım | Mevcut rakım. |
coordinate.latitude | Yola eklenen mevcut enlem koordinatı. |
coordinate.longitude | Yola eklenen mevcut boylam koordinatı. |
kurs | Derece cinsinden mevcut yön. |
hız | Şu anki hız. |
timestamp | Geçerli okumanın tarihi/saati. |
Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation
numaralı telefonu arayın ve didUpdateLocation
etkinliğini işlemek için GMSRoadSnappedLocationProviderListener
öğesini kullanın.
Aşağıdaki örnekte startUpdatingLocation
çağrısı gösterilmektedir:
Swift
mapView.roadSnappedLocationProvider.startUpdatingLocation()
Objective-C
[_mapView.roadSnappedLocationProvider startUpdatedLocation];
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üncellemelerini almak için allowsBackgroundLocationUpdates
ayarını true olarak yapın:
Swift
mapView.roadSnappedLocationProvider.allowsbackgroundLocationUpdates = true
Objective-C
_mapView.roadSnappedLocationProvider.allowsbackgroundLocationUpdates = EVET;
Varış etkinliklerini algılama
Uygulamanız bir hedefe ulaşıldığını algılamak için didArriveAtWaypoint
etkinliğini kullanır. continueToNextDestination()
yöntemini çağırıp rehberliği yeniden etkinleştirerek rehberliği devam ettirip bir sonraki ara noktaya geçebilirsiniz. Uygulamanız, continueToNextDestination()
çağırdıktan sonra rehberliği yeniden etkinleştirmelidir.
Uygulama continueToNextDestination
çağrısından sonra, gezgin artık önceki hedefle ilgili verilere sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek isterseniz continueToNextDestination()
işlevini çağırmadan önce bu bilgiyi kılavuzdan almanız gerekir.
Aşağıdaki kod örneğinde, didArriveAtWaypoint
etkinliğini işlemek için bir yöntem gösterilmektedir:
Swift
func navigator(_ navigator: GMSNavigator, didReachAt referans noktası: GMS NavigationWaypoint) { print("Varışınız: (waypoint.title)") mapView.navigator?.continueToNextDestination() mapView.navigator?.isGuidanceActive = true }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didReachAtWaypoint:(GMS NavigationWaypoint *)waypoint { NSLog(@"Varış noktanız: %@", ara nokta.title); [_mapView.navigator continueToNextDestination]; _mapView.navigator.guidanceActive = YES; }
Rota değişikliği güncellemeleri alınıyor
Rota her değiştiğinde bildirim almak için navigatorDidChangeRoute
etkinliğini işlemek üzere bir yöntem oluşturun. GMSNavigator
öğesinin routeLegs
ve currentRouteLeg
özelliklerini kullanarak yeni rotaya erişebilirsiniz.
Swift
func navigatorDidChangeRoute(_ navigator: GMSNavigator) { Print("Güzergah değişti.") }
Objective-C
- (void)navigatorDidChangeRoute:(GMSNavigator *)navigator { NSLog(@"Yol değişti."); }
Hedef güncellemelerine ulaşma süresi
Hedef güncellemelerine sürekli ulaşmak 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 belirtir.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingTime time: TimeInterval) { Print("Sonraki hedefe kalan süre: (zaman)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateRemainingTime:(NSTimeInterval)time { NSLog(@"Sonraki hedefe kalan süre: %f", time); }
Bir sonraki hedefle ilgili tahmini süredeki minimum değişikliği GMSNavigator
üzerinde timeUpdateThreshold
özelliğini ayarlayın. Değer, saniye cinsinden belirtilir. Bu özellik ayarlanmazsa hizmetler bir saniyelik varsayılan değer kullanır.
Swift
gezgin?.timeUpdateThreshold = 10
Objective-C
navigator.timeUpdateThreshold = 10;
Hedefe mesafe güncellemeleri alınıyor
Hedef güncellemelerine sürekli mesafe almak için didUpdateRemainingDistance
etkinliğini işleyen bir yöntem oluşturun. distance
parametresi, bir sonraki hedefe giden tahmini mesafeyi metre cinsinden belirtir.
Swift
func navigator(_ navigator: GMSNavigator, didUpdateRemainingDistance mesafe: CLLocationDistance) { allow miles = range * 0.00062137 press("Sonraki hedefe uzaklık: (mil) mil.") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateRemainingDistance:(CLLocationDistance)mesafe { çift mil = distance * 0.00062137; NSLog(@"%@", [NSString stringWithFormat:@"Sonraki hedefe uzaklık: %.2f.", miles]); }
Bir sonraki hedefe tahmini mesafedeki minimum değişikliği ayarlamak için GMSNavigator
üzerinde distanceUpdateThreshold
özelliğini ayarlayın (değer metre cinsinden belirtilir). Bu özellik ayarlanmazsa hizmetler bir metrelik varsayılan değer kullanır.
Swift
gezgin?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
Trafik güncellemeleri alınıyor
Kalan rotanın 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
sonucunu döndürür. Kategoride yapılan güncellemeler, uygulama kullanıcısının mevcut konumuna bağlıdır. Trafik verileri kullanılamıyorsa GMSNavigationDelayCategory
0 değerini döndürür. 1-3 arasındaki sayılar, hafiften yoğuna doğru
akışın arttığını gösterir.
Swift
func navigator(_ navigator: GMSNavigator, didUpdate delayCategory: GMS NavigationDelayCategory) { Print("Sonraki hedefe giden trafik akışı: (delayCategory)") }
Objective-C
- (void)navigator:(GMSNavigator *)navigator didUpdateDelayCategory:(GMS NavigationDelayCategory)delayCategory { NSLog(@"Sonraki hedefe giden trafik akışı: %ld", (long)delayCategory); }
GMSNavigationDelayCategory
özelliği aşağıdaki gecikme düzeylerini sunar:
Gecikme kategorisi | Açıklama |
---|---|
GMSNavigationDelayCategoryNoData | 0 - Kullanılamıyor, trafik için veri yok veya : |
rotayı görebilirsiniz. | |
GMSNavigationDelayCategoryHeavy | 1 - Ağır. |
GMSNavigationDelayCategoryMedium | 2 - Orta. |
GMSNavigationDelayCategoryLight | 3 - Hafif. |
Hız güncellemeleri alınıyor
Bir sürücü hız sınırını aştığında güncelleme almak için didUpdateSpeedingPercentage
etkinliğini işleme alacak bir yöntem oluşturun.
Swift
// Hız etkinliklerini işleyecek dinleyici. func navigator( _ navigator: GMSNavigator, didUpdateSpeedingPercentagePercentage%AboveLimit: CGFloat ) { print("Speed is (percentageAboveLimit) limitin üzerinde.") }
Objective-C
// Hız etkinliklerini işleyecek işleyici. - (void)navigator:(GMSNavigator *)navigator didUpdateSpeedingPercentage:(CGFloat)percentageAboveLimit { NSLog(@"Hız sınırın %f üzerindedir.", percentageAboveLimit); }
Önerilen ışıklandırma modunu değiştirme
Işıklandırmadaki tahmini değişikliklerle ilgili güncellemeleri almak için didChangeSuggestedLightingMode
etkinliğini işleyecek bir yöntem oluşturun.
Swift
// Aydınlatma modunda önerilen değişiklikler için bir işleyici tanımlayın. func navigator(_ navigator: GMSNavigator, didChangeSuggestedLightingMode spreadsheetMode: GMS NavigationLightingMode) { Print("Önerilen ışık modu değiştirildi: (String(açıklama: aydınlatmaMode))")
// Önerilen değişikliği yapın. mapView.lightingMode = lightMode }
Objective-C
// Işıklandırma modunda yapılması önerilen değişiklikler için bir işleyici tanımlayın. -(void)navigator:(GMSNavigator *)navigator didChangeSuggestedLightingMode: (GMS NavigationLightingMode)lightingMode { NSLog(@"Önerilen ışık modu değişti: %ld", (long)lightingMode);
// Önerilen değişikliği yapın. _mapView.lightingMode = lightingMode; }