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'sı, kullanıcının konumu ve rota üzerindeki koşullarla ilişkili dinleyiciler ile önemli zaman ve mesafe verileri sağlar. Haritanın görünüm denetleyicisinde uygulamanızın şu 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.- Rota değiştiğinde tetiklenen
GMSNavigatorListener.navigatorDidChangeRoute. GMSNavigatorListener.didUpdateRemainingTime, yol tarifi etkin durumdayken bir sonraki hedefe ulaşma zamanı değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateRemainingDistance, rehberlik etkin durumdayken bir sonraki hedefe olan mesafe değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateDelayCategory, rehberlik etkin durumdayken bir sonraki hedefe gitme süresi değiştiğinde çağrılır.- Tahmini ışık koşulları güncellendiğinde tetiklenir.
GMSNavigatorListener.didChangeSuggestedLightingMode, Örneğin, kullanıcının bulunduğu konumda gece olduğunda aydınlatma değişir. - Sürücü hız sınırını aştığında tetiklenen
GMSNavigatorListener.didUpdateSpeedingPercentage, - Kullanıcının konumu değiştikçe tekrar tekrar çağrılan
GMSRoadSnappedLocationProviderListener.didUpdateLocation.
Kodu göster
Gerekli protokollere uygunluk beyan etme
Gezinme yöntemlerini uygulamadan önce görünüm denetleyicisinin aşağıdaki protokolleri kullanması gerekir:
Swift
class ViewController:
UIViewController,
GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener
{
}
Objective-C
@interface ViewController () <GMSNavigatorListener, GMSRoadSnappedLocationProviderListener>
@end
Geçiş protokollerini uyguladıktan sonra dinleyicileri 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 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 | Mevcut yola sabitlenmiş 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 işlevinin çağrılması 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 ne zaman ulaşıldığını algılamak için didArriveAtWaypoint etkinliğini kullanıyor. continueToNextDestinationWithCompletion() tuşuna basıp rehberliği yeniden etkinleştirerek rehberliğe devam edebilir ve sonraki yol noktasına geçebilirsiniz. Uygulamanız, arama yapıldıktan sonra rehberliği yeniden etkinleştirmelidir
continueToNextDestinationWithCompletion().
Uygulama continueToNextDestinationWithCompletion işlevini çağırdıktan sonra gezinme aracı artık önceki hedefle ilgili verilere sahip olmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestinationWithCompletion() işlevini çağırmadan önce bu bilgileri navigatörden almanız gerekir.
Aşağıdaki kod örneğinde, didArriveAtWaypoint etkinliğinin nasıl işleneceği gösterilmektedir:
Swift
func navigator(_ navigator: GMSNavigator, didArriveAt waypoint: GMSNavigationWaypoint) {
print("You have arrived at: \(waypoint.title)")
mapView.navigator?.continueToNextDestinationWithCompletion { _, _ in }
mapView.navigator?.isGuidanceActive = true
}
Objective-C
- (void)navigator:(GMSNavigator *)navigator didArriveAtWaypoint:(GMSNavigationWaypoint *)waypoint {
NSLog(@"You have arrived at: %@", waypoint.title);
[_mapView.navigator continueToNextDestinationWithCompletion:^(GMSNavigationWaypoint *waypoint,
GMSRouteStatus status){
}];
_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'nin 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
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 minimum değişikliği bir sonraki varış noktasına ayarlamak için timeUpdateThreshold özelliğini GMSNavigator olarak 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 ulaşmak için minimum değişikliği ayarlamak üzere GMSNavigator üzerinde distanceUpdateThreshold özelliğini 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üncellemeleri 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 gösterir:
| Gecikme kategorisi | Açıklama |
|---|---|
| GMSNavigationDelayCategoryNoData | 0 - Kullanılamıyor, trafik veya : |
| rotayı seçin. | |
| GMSNavigationDelayCategoryHeavy | 1 - Yoğun. |
| GMSNavigationDelayCategoryMedium | 2 - Orta |
| GMSNavigationDelayCategoryLight | 3 - Açık |
Hızla ilgili güncellemeler alma
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 ışıklandırma modunu değiştirme
GMSNavigator
Günün saatine ve cihazın konumuna göre önerilen aydınlatma modunu hesaplar ve önerilen mod değiştiğinde (ör. gün doğumu veya gün batımında) yalnızca didChangeSuggestedLightingMode
dinleyici yöntemini çağırır. Haritanın, kullanıcı uygulamanızı başlattığında uygun aydınlatma moduyla başlamasını sağlamak için başlatma sırasında mapView.lightingMode'ı navigasyon cihazının suggestedLightingMode olarak ayarlayın ve sonraki değişiklikleri işlemek için didChangeSuggestedLightingMode'ı uygulayın.
Aşağıdaki örnekte, ilk ışıklandırma modunun nasıl ayarlanacağı ve önerilen ışıklandırma modu değişikliklerinin nasıl dinleneceği gösterilmektedir:
Swift
// Set the initial lighting mode on launch or setup.
mapView.lightingMode = mapView.navigator?.suggestedLightingMode ?? .normal
// 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
// Set the initial lighting mode on launch or setup.
_mapView.lightingMode = _mapView.navigator.suggestedLightingMode;
// 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;
}
Otomatik ve manuel aydınlatma modu yapılandırması hakkında daha fazla bilgi için Normal ve düşük ışık modlarını yapılandırma başlıklı makaleyi inceleyin.