Я использую locationManager: didUpdateToLocation: fromLocation: для получения обновлений местоположения. Почти все работает хорошо, но когда я проверяю правильность newLocation.speed, стоя на месте, я почти всегда получаю значение скорости больше 0. Даже когда я начинаю получать обновления местоположения в первый раз и даже НИКОГДА не перемещаюсь, я получу положительные значения после того, как несколько обновлений.
Просто сделайте простую проверку больше 0, затем установите UILablel, если это:
if (newLocation.speed > 0) {
self.speed.text = [NSString stringWithFormat:@"%.2f",[self speed:newLocation.speed]];
}
Больше кода из этого метода:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// Check first if we are getting the accuracy we want
if (newLocation.horizontalAccuracy < 0) return;
// Make sure the update is new not cached
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) return;
// Check to see if old and new are the same
if ((oldLocation.coordinate.latitude == newLocation.coordinate.latitude) &&
(oldLocation.coordinate.longitude == newLocation.coordinate.longitude)) return;
// Make sure our new location is not super far away from old
CLLocationDistance dist = [newLocation distanceFromLocation:oldLocation];
NSLog(@"Distance: %f", dist);
if (dist > 40) return;
// Make sure we have a new location
if (!newLocation) return;
// Check to see if we are stopped
if (newLocation.speed == 0) {
self.inMotion = NO;
} else if (newLocation.speed > 0) {
self.inMotion = YES;
} else {
// Probably an invalid negative value
self.inMotion = NO;
}//end
// Speed
// Should always be updated even when not recording!
if (newLocation.speed > 0 && inMotion) {
self.speed.text = [NSString stringWithFormat:@"%.2f",[self speed:newLocation.speed]];
NSLog(@"Speed: %f", newLocation.speed);
}
// Tons more code below that I removed for this post
}//end
Это нормально?