2010-08-03 4 views
3

Je n'utilise pas ceci pour les directions de conduite ou semblables. J'ai quelques annotations et je veux un déclencheur lorsque l'utilisateur est à proximité de l'un de ceux, afin que je puisse alerter l'utilisateur.Comment obtenirDistance de userLocation toutes les 4-5 secondes

Il semble que didUpdateToLocation ne soit appelée qu'une seule fois par appel de startUpdatingLocation? Au moins quand je NSLog dans cette méthode, je reçois seulement une ligne dans la console. Non, je ne me promène pas avec l'iphone. Donc: Quelle est la bonne façon de mettre en place une surveillance continue de userLocation et d'obtenir un "callback" (soit quand 3-4 secondes ont passé ou quand l'utilisateur a bougé, disons 10 mètres)?

Répondre

4

Comme vous le savez sans doute, c'est le code pour initialiser et démarrer le gestionnaire de l'emplacement:

locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; 
[locationManager startUpdatingLocation]; 

et mettre en œuvre didUpdateToLocation comme ceci:

- (void) locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation*) oldLocation 
{ 
    // This will be called every time the device has any new location information. 
} 

Le système appellera didUpdateToLocation chaque fois il y a une mise à jour de l'emplacement. Si le système ne détecte aucun changement d'emplacement didUpdateToLocation ne sera pas appelé. La seule chose que vous pouvez faire est de régler le distanceFilter et desiredAccuracy comme je l'ai fait dans l'exemple pour vous donner la plus grande précision.

Mise à jour

Utilisation kCLLocationAccuracyBest au lieu de kCLLocationAccuracyNearestTenMeters pour plus de précision.

+0

Merci d'avoir répondu! Je ne pouvais pas trouver un moyen de corriger immédiatement userLocation pour pouvoir le tester correctement. Je vais simplement implémenter l'alerteur de distance là-bas et laisser quelqu'un le tester en direct. C'est en fait mieux que d'utiliser un intervalle de temps. La précision est-elle la meilleure et le filtre = 10 m la même chose, et si non, pourquoi pas? (Si vous savez.) –

+0

Vous avez raison, kCLLocationAccuracyBest est mieux. Assez sûr que kCLDistanceFilterNone est le meilleur. La documentation indique toutes ses notifications lors de l'utilisation de kCLDistanceFilterNone. –

+0

Eh bien, en fait, je voulais dire que déplacer 10 mètres est un bon critère pour des mises à jour assez fréquentes sans les avoir trop souvent (ou en restant immobile, ce que vous obtiendriez si vous définissiez les deux "meilleur/aucun"?) Je me demandais juste lequel de "précision = meilleur + filtre = 10m" et "précision = 10m + filtre = aucun" a donné les résultats les plus appropriés, en quelque sorte, c'était tout. :) –

Questions connexes