Uygulamanızın, kullanıcı bir rota boyunca ilerlerken değişen çeşitli etkinlikleri dinlemesini ve bunlara yanıt vermesini sağlamak için bu kılavuzu kullanın. Bu kılavuzda rota tanımlama konusu ele alınmamaktadır. Yalnızca rota üzerindeki etkinliklere yanıt verme konusu ele alınmaktadır.
Genel Bakış
iOS için Navigasyon SDK'sı, kullanıcının konumu ve rota boyunca koşullarla ilgili 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.GMSNavigatorListener.navigatorDidChangeRoute, rota değiştiğinde tetiklenir.GMSNavigatorListener.didUpdateRemainingTime, rehberlik etkinken bir sonraki varış noktasına kalan süre değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateRemainingDistance, rehberlik etkinken bir sonraki hedefe olan mesafe değiştikçe tekrar tekrar çağrılır.GMSNavigatorListener.didUpdateDelayCategory, rehberlik etkinken bir sonraki varış noktasına olan gecikme kategorisi değiştiğinde çağrılır.GMSNavigatorListener.didChangeSuggestedLightingMode, tahmini ışık koşulları güncellendiğinde tetiklenir. Örneğin, kullanıcının bulunduğu konumda gece olduğunda ışıklandırma değişir.GMSNavigatorListener.didUpdateSpeedingPercentage, sürücü hız sınırını aştığında tetiklenir.- Kullanıcının konumu değiştikçe tekrar tekrar çağrılan
GMSRoadSnappedLocationProviderListener.didUpdateLocation.
Kodu göster
Gerekli protokollere uygunluğu beyan etme
Gezinme yöntemlerini uygulamadan önce görünüm denetleyicinin şu protokolleri benimsemesi gerekir:
Swift
class ViewController:
UIViewController,
GMSNavigatorListener,
GMSRoadSnappedLocationProviderListener
{
}
Objective-C
@interface ViewController () <GMSNavigatorListener, GMSRoadSnappedLocationProviderListener>
@end
Gezinme 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 gereklidir.
location örneği aşağıdaki özellikleri gösterir:
| Konum özelliği | Açıklama |
|---|---|
| altitude | Mevcut rakım. |
| coordinate.latitude | Yola sabitlenmiş mevcut enlem koordinatı. |
| coordinate.longitude | Yola sabitlenmiş mevcut boylam koordinatı. |
| kurs | Derece cinsinden mevcut yön. |
| hız | Şu anki hız. |
| timestamp | Mevcut ölçümün tarihi/saati. |
Sürekli konum güncellemeleri almak için mapView.roadSnappedLocationProvider.startUpdatingLocation yöntemini çağırın ve didUpdateLocation etkinliğini işlemek için GMSRoadSnappedLocationProviderListener yöntemini 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ış etkinlikleri algılanıyor
Uygulamanız, bir hedefe ulaşıldığını algılamak için didArriveAtWaypoint etkinliğini kullanıyor. continueToNextDestinationWithCompletion() yöntemini çağırıp rehberliği yeniden etkinleştirerek rehberliği devam ettirebilir ve bir sonraki ara noktaya ilerleyebilirsiniz. Uygulamanız, continueToNextDestinationWithCompletion() çağrısından sonra rehberliği yeniden etkinleştirmelidir.
Uygulama continueToNextDestinationWithCompletion yöntemini çağırdıktan sonra gezinme aracında önceki hedefle ilgili veri kalmaz. Bir rota ayağıyla ilgili bilgileri analiz etmek istiyorsanız continueToNextDestinationWithCompletion() yöntemini çağırmadan önce bu bilgileri navigasyon cihazından 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?.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ştiğ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.");
}
Varış süresi güncellemelerini alma
Varış noktasına kalan süreyle 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çecek 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);
}
Bir sonraki varış noktasına tahmini varış süresindeki minimum değişikliği ayarlamak için GMSNavigator üzerinde timeUpdateThreshold özelliğini ayarlayın. Değer, saniye cinsinden belirtilir. Bu özellik ayarlanmazsa hizmetler varsayılan olarak bir saniye değerini 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]);
}
Bir sonraki hedefe olan 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 varsayılan olarak bir metre değerini kullanır.
Swift
navigator?.distanceUpdateThreshold = 100
Objective-C
navigator.distanceUpdateThreshold = 100;
Trafik güncellemeleri alma
Kalan rotadaki trafik akışıyla ilgili sürekli güncellemeler almak için didUpdateDelayCategory etkinliğini işleyecek bir yöntem oluşturun. delayCategoryToNextDestination çağrısı, 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, hafiften yoğuna
artan akışı 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 verisi yok veya : |
| gösterilir. | |
| GMSNavigationDelayCategoryHeavy | 1 - Yoğun. |
| GMSNavigationDelayCategoryMedium | 2 - Orta. |
| GMSNavigationDelayCategoryLight | 3 - Açık. |
Hız sınırını aşma güncellemeleri 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 ışıklandırma modu değiştiriliyor
GMSNavigator, günün saatine ve cihazın konumuna göre önerilen aydınlatma modunu hesaplar ve
didChangeSuggestedLightingMode
dinleyici yöntemini yalnızca önerilen mod değiştiğinde (ör. gün doğumunda veya gün batımında) çağırır. Kullanıcı uygulamanızı başlattığında haritanın uygun açık modla açılması için başlatma sırasında navigasyon cihazının suggestedLightingMode değerini mapView.lightingMode olarak ayarlayın ve sonraki değişiklikleri işlemek için didChangeSuggestedLightingMode değerini uygulayın.
Aşağıdaki örnekte, ilk aydınlatma modunun nasıl ayarlanacağı ve önerilen aydınlatma 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 ışık modu yapılandırması hakkında daha fazla bilgi için Normal ve zayıf ışık modlarını yapılandırma başlıklı makaleyi inceleyin.