在我的应用中,我试图获得两个位置之间的距离。我按下我的应用程序按钮,走过(大)房间,CLLocationDistance返回0.000000。
.h文件:
@property (strong, nonatomic) IBOutlet UIImageView *stopButton;
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *firstLocation;
@property (strong, nonatomic) CLLocation *secondLocation;
@property (strong, nonatomic) IBOutlet UILabel *locationLabel;
.m文件:
- (void)viewDidLoad {
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager startUpdatingLocation];
self.firstLocation = [self deviceLocation];
}
- myButtonFunction {
self.secondLocation = [self deviceLocation];
self.locationLabel.text = [[NSString alloc] initWithFormat:@"%f", [self.firstLocation distanceFromLocation:self.secondLocation]];
}
- (CLLocation *)deviceLocation {
return [[CLLocation alloc] initWithLatitude:self.locationManager.location.coordinate.latitude longitude:self.locationManager.location.coordinate.longitude];
}
答案 0 :(得分:0)
您需要等到位置管理员告诉您它有新信息。在此之前,您将始终获得相同的位置。
管理员会通过委托方法locationManager:didUpdateLocations:
(locationManager:didUpdateToLocation:fromLocation:
for iOS< 6.0)通知您。您需要一个实现该方法的类作为位置管理器的委托,并且在调用该方法之前无法检查新位置。
另外,请注意,第一次调用该方法时,可能实际上并不存在 fresh 数据。请参阅my answer at "Core Location Negative Values"。
答案 1 :(得分:0)
通过使用设备位置,您将失去对实际记录内容的大量控制权。例如,设备位置可能具有不更新的条件,除非您的位置变化超过20米......或者它可能每小时更新一次。你无从知晓。
正如Josh所说,你必须从CLLocationManagerDelegate
回调获得位置。将它们存储在您的班级中,当您按下按钮时,记录您存储的最后位置。只有这样,您才能获得与您指定的位置设置相关的数据。