我正在编写一个应用程序,在用户走动时显示用户与固定点的距离(即,每次用户移动时,更新显示用户到该点的距离的标签)。我使用CLLocationManager,代码如下所示:
- (void)viewDidLoad
{
locationManager=[[CLLocationManager alloc]init];
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
CLLocationDistance meters = [newLocation distanceFromLocation:fixedPoint];
self.distanceLabel.text = [[NSString alloc] initWithFormat:@"Distance: %.1f feet", meters*3.2808399];
}
应该显示从用户到该点的距离的标签不会不断更新,并且在更新时,它通常不会显示从用户到固定点的正确距离。我想知道是否有更好的方法让我尝试这样做,或者核心位置框架的基本限制使得这不可能。任何帮助将不胜感激。
答案 0 :(得分:4)
您是否过滤掉旧的(缓存)职位?您还应该根据准确度进行过滤,您可能不希望低精度位置。
您不会获得连续或定期更新,只有在位置发生变化时才会发生回调。
假设该设备具有GPS并且可以看到足够的GPS卫星以获得良好的位置,这可以正常工作。
-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSTimeInterval age = -[newLocation.timestamp timeIntervalSinceNow];
if (age > 120) return; // ignore old (cached) updates
if (newLocation.horizontalAccuracy < 0) return; // ignore invalid udpates
...
}